C#使用已创建的AES密钥

时间:2011-06-29 10:30:11

标签: c# security cryptography aes

我有预先生成的AES密钥,我想在C#中使用它。任何人都可以指出我正确的方向如何使用预生成的AES密钥和RijndaelManaged对象。

编辑:我有byte[]数组中的密钥,我需要加密Stream

我在网上找到了这些代码示例:

    private static byte[] Decrypt(byte[] key, byte[] PGPkey)
    {
        RijndaelManaged rDel = new RijndaelManaged();
        rDel.Key = key;
        //rDel.Mode = CipherMode.ECB; // http://msdn.microsoft.com/en-us/library/system.security.cryptography.ciphermode.aspx
        rDel.Padding = PaddingMode.PKCS7; // better lang support
        ICryptoTransform cTransform = rDel.CreateDecryptor();
        byte[] resultArray = cTransform.TransformFinalBlock(PGPkey, 0, PGPkey.Length);
        return resultArray;
    }

    private static byte[] Encrypt(byte[] key, byte[] PGPkey)
    {
         RijndaelManaged rDel = new RijndaelManaged();
         rDel.Key = key;
         //rDel.Mode = CipherMode.ECB; // http://msdn.microsoft.com/en-us/library/system.security.cryptography.ciphermode.aspx
         rDel.Padding = PaddingMode.PKCS7; // better lang support
         ICryptoTransform cTransform = rDel.CreateEncryptor();
         byte[] resultArray = cTransform.TransformFinalBlock(PGPkey, 0, PGPkey.Length);
         return resultArray;
     }

我没有得到任何错误但是在解密之后,字节数组与进入ecryption之前的字节数组不同。

编辑:我认为我的工作正常,必须设置rDel.Mode = CipherMode.ECB;

2 个答案:

答案 0 :(得分:1)

如果在将其设置为ECB模式时有效,那就是之前使用CBC模式,它在加密时使用随机生成的初始化向量。初始化向量使密文随机化,因此使用相同密钥加密的两个相同的数据,不会产生相同的密文。您可以获取byte[] RijndaelManagedInstance.IV属性并将其与您的密文一起存储。然后在解密时,将相同的属性设置为用于加密的初始化向量,然后在解密后应该收到相同的纯文本。

答案 1 :(得分:0)

您需要将密钥设为byte[]。然后将其分配给Key属性。

使用自动生成的IV加密很好。但是您需要将其与加密数据一起存储并将其放入解密器中以再次解密数据。

请勿使用ECBCBC更适合您的使用。