使用Aes解密失败

rav*_*mar 1 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);

    }
Run Code Online (Sandbox Code Playgroud)

但是在解密从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);
    }
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Jon*_*eet 8

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

return Convert.ToBase64String(buffer);
Run Code Online (Sandbox Code Playgroud)

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

return Encoding.UTF8.GetString(buffer);
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

我已经"使用UTF-8解码"你已经"转换为base64",因此解码步骤与编码步骤不匹配.