gpt4 book ai didi

c# - 使用非标准 key 长度调用 CryptoJS.AES.encrypt/decrypt 时如何处理 AES key ?

转载 作者:太空宇宙 更新时间:2023-11-03 13:38:08 24 4
gpt4 key购买 nike

我目前在使用长度不是 128、192 或 256 位的 key 在 C# 中解密已在 CryptoJS 中加密的项目时遇到问题。 CryptoJS 允许在加密/解密期间使用“奇数”长度的 key ,但 C# 中的对称算法类(例如 RijndaelManaged)不允许这样做。

Javascript

var key =  CryptoJS.enc.Utf8.parse("This key is 160 bits"); // Not 128, 192, or 256 bits, but is allowed
var iv = CryptoJS.enc.Hex.parse("101112131415161718191a1b1c1d1e1f");
var result = CryptoJS.AES.encrypt("Encrypt Me!", key, { iv: iv });

// result.ciphertext = 2839aff89d889dd29480b038679fbd6e
// or result.ciphertext.toString(CryptoJS.enc.Base64) = KDmv+J2IndKUgLA4Z5+9bg==

C#

byte[] key = Encoding.UTF8.GetBytes("This key is 160 bits");
byte[] iv = { 0x10, 0x11, 0x12, 0x13,
0x14, 0x15, 0x16, 0x17,
0x18, 0x19, 0x1a, 0x1b,
0x1c, 0x1d, 0x1e, 0x1f };
byte[] encryptMe = Encoding.UTF8.GetBytes("Encrypt Me!");

using (RijndaelManaged rm = new RijndaelManaged())
{
rm.IV = iv;
rm.Key = key; //This is not allowed due to the key size being 160 bits. Exception thrown here.

using (ICryptoTransform ict = rm.CreateEncryptor())
{
byte[] encrypted = ict.TransformFinalBlock(encryptMe, 0, encryptMe.Length);
}
}

我的问题是 javascript 代码中的 key 到底发生了什么以允许它用于加密/解密?填充? chop ?是否调整了 CryptoJS 中的 AES 实现以使用“奇数” key 长度?

我曾尝试通过 chop 或填充(开头和结尾)字节数组来调整 C# 代码的键,但无济于事。我不是很熟悉 javascript 语法,并且在不了解正在发生的大部分事情的情况下查看了 CryptoJS 源代码。

最佳答案

我快速浏览了 CryptoJS 源代码,它似乎默默地做了一些非标准的事情。如果这是真的,就没有办法复制它使用标准 AES 所做的事情。

但是,要确保没有 key 派生等,请尝试执行 alert(result.key); 并查看它是否与您的输入相同。

关于c# - 使用非标准 key 长度调用 CryptoJS.AES.encrypt/decrypt 时如何处理 AES key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18049802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com