我有一个生成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]数组?
答案 0 :(得分:3)
听起来CurrentKey
是任意二进制数据 - 不是 UTF-8编码的字符串。如果您有任意数据需要编码为字符串(例如图像,加密或压缩数据),通常最好使用Base64或十六进制编码。 Base64非常简单:
string keyToSend = Convert.ToBase64String(CurrentKey);
...
byte[] recoveredKey = Convert.FromBase64String(keyString);