c# - AES 加密得到不正确的结果

标签 c# encryption aes

我尝试对某些文本使用 AES 加密,但解密后的文本与原始文本不同。

  • 原文:abcd
  • 解密文本:?9T?o??G???x;*

这是我的代码:

public static void Main(string[] args)
{
    byte[] original = { 97, 98, 99, 100 }; //"abcd"
    byte[] key = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
    byte[] iv = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    byte[] encrypt = Encrypt(original, key, iv);
    byte[] decrypt = Decrypt(encrypt, key, iv);
    Console.WriteLine(Encoding.UTF8.GetString(original));
    Console.WriteLine(Encoding.UTF8.GetString(decrypt));
    Console.ReadKey();
}

public static byte[] Encrypt(byte[] original, byte[] key, byte[] iv)
{
    using (var memoryStream = new MemoryStream())
    {
        using (var aes = new AesManaged { Key = key, IV = iv, Padding = PaddingMode.PKCS7, Mode = CipherMode.CBC })
        {
            using (var cryptoStream = new CryptoStream(memoryStream, aes.CreateEncryptor(), CryptoStreamMode.Write))
            {
                cryptoStream.Write(original, 0, original.Length);
            }
        }
        return memoryStream.ToArray();
    }
}

public static byte[] Decrypt(byte[] encrypt, byte[] key, byte[] iv)
{
    using (var memoryStream = new MemoryStream(encrypt))
    {
        using (var aes = new AesManaged { Key = key, IV = iv, Padding = PaddingMode.PKCS7, Mode = CipherMode.CBC })
        {
            using (var cryptoStream = new CryptoStream(memoryStream, aes.CreateEncryptor(), CryptoStreamMode.Read))
            {
                byte[] decrypt = new byte[encrypt.Length];
                cryptoStream.Read(decrypt, 0, decrypt.Length);
                return decrypt;
            }
        }
    }
}

怎么了?提前致谢。

最佳答案

您的解密代码中包含以下内容:

using (var cryptoStream = new CryptoStream(memoryStream, aes.CreateEncryptor(),
                                           CryptoStreamMode.Read))

将其更改为调用 aes.CreateDecryptor() 并且工作正常。

关于c# - AES 加密得到不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13320642/

相关文章:

c# - 我是否应该避免在测试中访问数据库作为用有效数据填充对象的快捷方式?

python - 加密 : AES Decryption

java - 我可以在不同的 jre 实现中使用 java keytool 生成的 keystore 吗

android - 使用 ndk 保护 Android 中的 native 方法和 api-key

JAVA解密错误: Needs Input to be multiple of 16

java - Java 中使用 CFB NoPadding 模式进行 C# AES 加密

C# - 将 PointF 转换为 Point

c# - 使用 ASP.NET Identity 2.2.1 设置简单注入(inject)器

c# - 文本字符串代码后面的粗体部分

encryption - bcrypt vs pbkdf2 用于加密私钥