使用Aes解密失败

时间:2017-05-25 12:15:20

标签: c# encryption cryptography aes

我正在使用此功能加密我的UWP项目中的数据:

public string Encrypt(string text, string key)
    {
        byte[] buffer = Encoding.UTF8.GetBytes(text);
        byte[] sessionKey = Encoding.UTF8.GetBytes(key);

        Aes myAes = Aes.Create();

        myAes.Mode = CipherMode.ECB;
        myAes.KeySize = 128;
        myAes.Key = sessionKey;
        myAes.Padding = PaddingMode.PKCS7;

        ICryptoTransform encryptor = myAes.CreateEncryptor();
        buffer = encryptor.TransformFinalBlock(buffer, 0, buffer.Length);

        return Convert.ToBase64String (buffer);

    }

但是在解密从Encrypt()返回的数据时,我得到了不同的结果(不等于Encrypt()的文本参数)。我使用以下代码:

public string Decrypt(string text, string key)

    {

        byte[] buffer = Convert.FromBase64String(text);
        byte[] sessionKey = Encoding.UTF8.GetBytes(key);

        Aes myAes = Aes.Create();

        myAes.Mode = CipherMode.ECB;
        myAes.KeySize = 128;
        myAes.Key = sessionKey;
        myAes.Padding = PaddingMode.PKCS7;

        ICryptoTransform decryptor = myAes.CreateDecryptor();
        buffer = decryptor.TransformFinalBlock(buffer, 0, buffer.Length);

        return Convert.ToBase64String(buffer);
    }

我使用相同的密钥进行加密和解密

更新 传递给Encrypt()的文本参数:450131283 :: 0300DC98050044C406000100040052C40100626B02007E810900660F

从Encrypt()返回文本: " lzkPu35Hq7j52IiMWRYSS6j7Vg84abVmhXmNpSxHShJDTbOqkZRFtsPZkEzTsjgRT4MzRHCQUS6MCiq1e5JCune4bZZi1nxxwHtEjZLKZ9E ="

我传递给Decrypt()方法的相同(上面)值,我得到以下内容: " NDUwMTMxMjgzOjowMzAwREM5ODA1MDA0NEM0MDYwMDAxMDAwNDAwNTJDNDAxMDA2MjZCMDIwMDdFODEwOTAwNjYwRg =="

1 个答案:

答案 0 :(得分:8)

问题是您在解密结束时所做的事情:

return Convert.ToBase64String(buffer);

您实际上想要将解密后的二进制数据转换回字符串,其方式与您将字符串转换为纯文本二进制数据的原始方式相反,因此您需要:

return Encoding.UTF8.GetString(buffer);

这种问题通常最好通过查看转换链中每个方向的每一步来解决,并确保它们平衡。所以看起来应该是这样的:

Text
    (Encode with UTF-8)
        Non-encrypted binary data
            (Encrypt)
                Encrypted binary data
                    (Convert to base64)
                        Encrypted data as base64 text
                        (Store or whatever...)
                        Encrypted data as base64 text
                    (Convert from base64)
                Encrypted binary data
            (Decrypt)
        Non-encrypted binary data
    (Decode with UTF-8)
Text

我已经使用UTF-8解码"#34;你已经"转换为base64"所以解码步骤与编码步骤不匹配。

相关问题