解密使用AES失败
我使用这个功能在我UWP项目数据加密:解密使用AES失败
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())。我使用下面的代码:
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);
}
我使用加密和解密使用相同的密钥
UPDATE: 文本参数传递给加密():450131283 :: 0300DC98050044C406000100040052C40100626B02007E810900660F
自加密()返回文本: “lzkPu35Hq7j52IiMWRYSS6j7Vg84abVmhXmNpSxHShJDTbOqkZRFtsPZkEzTsjgRT4MzRHCQUS6MCiq1e5JCune4bZZi1nxxwHtEjZLKZ9E =”
我传递给解密()方法,我也得到了以下同(以上)值: “NDUwMTMxMjgzOjowMzAwREM5ODA1MDA0NEM0MDYwMDAxMDAwNDAwNTJDNDAxMDA2MjZCMDIwMDdFODEwOTAwNjYwRg ==”
的问题是,你正在与解密结束做什么:
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解码”,“转换为base64”,所以解码步骤不匹配的编码步骤。
用你的答案更新我的代码后,我的加密方法给了怪异的字符:“ h 2 e\u007f dT\uћћ\ \ \ \ \\ ))) '\ u0013> ] \ u001c \u0016 A &y \ r \u001b \ a \ u0016 \u 8emA\vm \ 0 \u0017 \u0018 k \\] \u001d 9“ –
@ravikumar:我没有建议改变你的* encrypt *方法 - 我建议改变你的* decrypt *方法。请仔细阅读答案的其余部分,以便了解将要发生的事情。 –
不同的结果?不是错误?解密应该正常工作或失败。 – Crowcoder
@Crowcoder我认为是一样的,但发现如果我使用错误的IV解密,除了前16个字节之外的所有内容都可以正常解密,并且不会抛出异常。如果你显示输入和输出ravi,可能会有所帮助。 – Kevin
@凯文,我更新了我的答案。解密失败。 –