【问题标题】:AES key converting to string and byte[] C#AES 密钥转换为字符串和字节 [] C#
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2012-12-31
    • 2018-10-01
    相关资源
    最近更新 更多