繁体   English   中英

C#中的对称加密类似于JAVA

[英]symmetric encryption in c# resembles JAVA

private static byte[] encryptData(ByteArrayOutputStream data, byte[] symmetricKey) throws EncryptionException {
        try {
            SecretKey secKey = new SecretKeySpec(symmetricKey, "AES");
            Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.ENCRYPT_MODE, secKey);
            return cipher.doFinal(data.toByteArray());
        } catch (NoSuchAlgorithmException | NoSuchPaddingException | IllegalBlockSizeException |
                InvalidKeyException |
                BadPaddingException e) {
            throw new EncryptionException(e);
        }
    }

我遇到需要使用.NET加密数据并使用JAVA解密相同数据的情况。 本质上,我需要在.NET中重写上述加密方法。

public byte[] Encrypt(byte[] key, byte[] plainText)
        {
            using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())
            {
                using (ICryptoTransform encryptor = aesProvider.CreateEncryptor(key, magicIV))
                {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                        {
                            cs.Write(plainText, 0, plainText.Length);
                        }
                        byte[] cipherText = ms.ToArray();
                        return cipherText;
                    }
                }
            }
        }

我在某处使用的上述代码强制执行JAVA不需要的IV。 JAVA代码中使用的IV是什么?

我尝试了许多无效的链接。 .NET和Java之间的对称加密

请帮忙

如果您当前的Java解密代码也没有要求IV(并且您的解密返回了您加密的相同数据),则Cipher.getInstance("AES")将使用ECB块模式返回一个对象。

.NET对称算法默认为CBC块模式,这需要IV。

您有两种选择:

  • 在调用CreateEncryptor之前,设置aesProvider.Mode = CipherMode.ECB
  • aesProvider.IV传递给CreateEncryptor的IV参数。 如果未设置IV属性,则在第一次读取时将使其成为密码随机值。
    • 您将需要将此数据传递给解密例程,然后该解密例程应使用“ AES / CBC / PKCS5Padding”并设置IV,但是用Java可以做到这一点。
    • 一种常见的传输方法是将数据简单地放在密文之前,然后在解密时选择前16个字节。
    • 不要对IV使用固定值,因为它与ECB几乎相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM