我试图加密一个string
并使用AES
解码它。加密工作正常,但我得到了一个The input data is not a complete block
的解密错误。我的垫子有问题吗?
var aes = System.Security.Cryptography.Aes.Create();
aes.GenerateKey();
aes.GenerateIV();
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
var desEncrypter = aes.CreateEncryptor();
var buffer = System.Text.ASCIIEncoding.ASCII.GetBytes(text);
finalV = Convert.ToBase64String(desEncrypter.TransformFinalBlock(buffer, 0, buffer.Length));
var desDecrypter = aes.CreateDecryptor();
var buff = System.Text.Encoding.ASCII.GetBytes(finalV);
var origValue = desDecrypter.TransformFinalBlock(buff , 0, buff .Length);
发布于 2017-02-03 19:52:13
您正在通过将字节转换为finalV
来创建Base64。为了将其转换为字节,需要调用Convert.FromBase64String(finalV)
。
您正在调用ASCII.GetBytes(finalV)
,这将为您获取代表该Base64文本的字节,而不是原始字节。
编辑
不知道您被困在了哪里,但是下面是基于您的代码的工作代码,因此您可以将其区分开来,看看您在哪里得到了错误:
string text = "ABC";
var aes = System.Security.Cryptography.Aes.Create();
aes.GenerateKey();
aes.GenerateIV();
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
var desEncrypter = aes.CreateEncryptor();
var buffer = System.Text.ASCIIEncoding.ASCII.GetBytes(text);
var finalV = Convert.ToBase64String(desEncrypter.TransformFinalBlock(buffer, 0, buffer.Length));
var desDecrypter = aes.CreateDecryptor();
var buff = Convert.FromBase64String(finalV);
var origValue = desDecrypter.TransformFinalBlock(buff, 0, buff.Length);
string result = Encoding.ASCII.GetString(origValue);
Console.WriteLine(result);
https://stackoverflow.com/questions/42031968
复制相似问题