如何让AesEncrypterHandler和Aes一样加密

问题描述 投票:0回答:1

我正在尝试使用 AesCryptoServiceProvider 以实现与 Aes. 这是我的 AesCryptoServiceProvider 的版本。

        public string version1(string plainText, string encryptionKey, string initializationVector)
        {
            AesCryptoServiceProvider provider = new AesCryptoServiceProvider
            {
                BlockSize = 128,
                Padding = PaddingMode.PKCS7,
                Key = Convert.FromBase64String(encryptionKey),
                IV = Encoding.UTF8.GetBytes(initializationVector)
            };

            byte[] buffer = Encoding.ASCII.GetBytes(plainText);
            byte[] encrypted = provider.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length);
            return Convert.ToBase64String(encrypted);
        }

而这里是 Aes 的版本。

        public string version2(string plainText, string encryptionKey, string initializationVector)
        {
            byte[] clearBytes = Encoding.UTF8.GetBytes(plainText);
            byte[] encryptedBytes;
            byte[] iv = Encoding.UTF8.GetBytes(initializationVector);

            using (Aes aes = Aes.Create())
            {
                aes.BlockSize = 128;
                aes.Padding = PaddingMode.PKCS7;
                aes.Key = Convert.FromBase64String(encryptionKey);
                aes.IV = iv;

                using (MemoryStream ms = new MemoryStream())
                using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(clearBytes, 0, clearBytes.Length);
                    cs.Close();
                    encryptedBytes = ms.ToArray();
                }
            }

            byte[] ivEncryptedBytes = new byte[iv.Length + encryptedBytes.Length];
            Buffer.BlockCopy(iv, 0, ivEncryptedBytes, 0, iv.Length);
            Buffer.BlockCopy(encryptedBytes, 0, ivEncryptedBytes, iv.Length, encryptedBytes.Length);

            return Convert.ToBase64String(ivEncryptedBytes);
        }

当我用版本1和版本2加密同一个字符串时,它们的结果是不同的。我想知道这两种方法有什么不同,以及如何使版本1产生与版本2相同的加密字符串? (p.s.我对加密相当陌生,所以如果答案很明显的话,很抱歉)谢谢!

encryption aes rijndael rijndaelmanaged aescryptoserviceprovider
1个回答
0
投票

正如@MichaelFehr所指出的那样,版本2只有初始化向量和加密字节在将字节转换回字符串之前连在一起。我测试了一下,如果我在版本1中用和版本2一样的方式来连接字符串,结果字符串会变得一样。

© www.soinside.com 2019 - 2024. All rights reserved.