【发布时间】:2018-11-28 08:57:33
【问题描述】:
我的方法AESEncrypt(string text) 返回一个字节数组。
如果我加密一条消息,并将返回的字节数组用作AESDecrypt(byte[] text) 的输入,那么一切正常。问题是,我需要将其转换为字符串,反之亦然,所以我尝试了以下方法:
byte[] encrypted = enc.AESEncrypt("Testmessage");
string encryptedStr = Convert.ToBase64String(encrypted);
byte[] test = Convert.FromBase64String(encryptedStr);
Console.WriteLine((encrypted == test));
我也用Encoding.ASCII.GetString()、Encoding.UTF8.GetString() 尝试过这个,
但是encrypted == test 每次都返回false...
我需要使用什么方法将 AES 字节[] 转换为字符串,反之亦然?
这是 AESEncrypt 方法:
public byte[] AESEncrypt(string s)
{
byte[] encrypted;
using (AesManaged aes = new AesManaged()) {
ICryptoTransform encryptor = aes.CreateEncryptor(AESKey, AESIV);
using (MemoryStream ms = new MemoryStream()) {
using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write)) {
using (StreamWriter sw = new StreamWriter(cs)) {
sw.Write(s);
}
encrypted = ms.ToArray();
}
}
}
return encrypted;
}
【问题讨论】:
-
什么样的字符串? Base64?十六进制?如果您想知道为什么文本编码方法不起作用,我建议您阅读this。简而言之:它们不是为此而生的。
标签: c# arrays string encoding byte