【问题标题】:How is an AES key processed when calling CryptoJS.AES.encrypt/decrypt with a non-standard key length?使用非标准密钥长度调用 CryptoJS.AES.encrypt/decrypt 时如何处理 AES 密钥?
【发布时间】:2013-08-05 02:28:31
【问题描述】:

我目前在解密 C# 中的项目时遇到问题,这些项目已在 CryptoJS 中使用长度不是 128、192 或 256 位的密钥进行加密。 CryptoJS 允许在加密/解密期间使用“奇数”长度的密钥,但 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 代码中的密钥究竟会发生什么以允许它用于加密/解密?填充?截断? CryptoJS 中的 AES 实现是否已调整为使用“奇数”密钥长度?

我尝试通过截断或填充(包括开头和结尾)字节数组来调整 C# 代码的键,但无济于事。我对 javascript 语法不是很熟悉,并且查看了 CryptoJS 源代码,但并不了解发生了什么。

【问题讨论】:

  • 我在编写 C# 代码时也遇到了完全相同的问题。你解决了吗?

标签: c# javascript cryptography cryptojs


【解决方案1】:

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

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

【讨论】:

  • result.key 在上面的例子中返回54686973206b6579206973203136302062697473,与输入键完全相同。在将此答案标记为正确之前,我将做更多的挖掘工作。你必须原谅我,但我想 100% 确定这一点:)
  • 虽然这不是一个完全直接的答案,但我确实收到了来自 Crypto-JS Google Group 的回复。在当前的 CryptoJS 3.1.2 中,不支持以文档指定以外的方式使用 API。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
相关资源
最近更新 更多