AES 密钥转换为字符串和字节 [] C#

AES key converting to string and byte[] C#

我有一个生成 AES 密钥的应用程序(使用 Security.Cryptography)。我使用那个 AES 密钥,将其转换为字符串并将其放入这样的 cookie 中:

string keyToSend = Encoding.UTF8.GetString(CurrentKey);
HttpCookie sessionKeyCookie = new HttpCookie("SessionKey", JsonConvert.SerializeObject(keyToSend));

keyToSend 看起来像这样:“����K��Ui ����&��Ӂ*��()”。

然后,我想取回那个密钥并用它来解密某些东西,我这样做:

string keyString = JsonConvert.DeserializeObject<string>(context.Cookies["SessionKey"].Value);
byte[] ascii = Encoding.ASCII.GetBytes(cevaString);
byte[] utf8 = Encoding.UTF8.GetBytes(cevaString);
byte[] utf32 = Encoding.UTF32.GetBytes(cevaString);

此外,我的 keyToString 看起来像这样:“����K��Ui ����&��Ӂ*��()”。

我的浏览器 cookie 如下所示:“�\u0010�K��Ui �\u0010�\u000f�\u001f\u0005�\u0012\u0018&�Ӂ* ��()\u001e"

初始密钥应该有 256 位,所以该数组中有 32 个条目,但我所有的变量(ascii、utf8、utf32)都有不同的长度。 为什么会这样,我如何检索 cookie 并将其转换为 byte[32] 数组?

听起来 CurrentKey 是任意二进制数据 - 不是 UTF-8 编码字符串。如果您有需要编码为字符串的任意数据(例如图像、加密或压缩数据),通常最好使用 Base64 或十六进制编码。 Base64 非常简单:

string keyToSend = Convert.ToBase64String(CurrentKey);
...
byte[] recoveredKey = Convert.FromBase64String(keyString);