【发布时间】:2015-03-18 12:21:25
【问题描述】:
我有一个生成 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的类型是什么?这很可能是编码问题。 -
公共静态字节[] CurrentKey;我是这么认为的,但是未编码的字符串看起来都一样。我将 UTF8.GetString() 应用于初始键,因此 UT8.GetBytes() 应该返回初始数组。
标签: c# asp.net-mvc encryption unicode cryptography