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

时间:2015-01-20 10:04:26

标签: c# asp.net-mvc encryption unicode cryptography

我有一个生成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 &amp; Ӂ* ()”。

我的浏览器cookie看起来像这样:“ \u0010 K Ui \u0010 \u000f \ u001f \ u0005 \ u0012 \ u0018&amp; Ӂ* ()\ u001e”< / p>

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

1 个答案:

答案 0 :(得分:3)

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

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