1

我正在使用 javascript Fritz Schneider 的 Rijndael 参考实现。我想用 C# 解密结果。

Javascript Rijndael 函数中提供的输入变量是

function rijndaelEncrypt(plaintext, key, mode) {}

其中plaintext 是要加密的文本,key 是加密密钥,mode 选择ECB 或CBC。我们使用的模式是ECB。

现在,对于 Microsoft Rijndael 实现,我应该使用什么初始化向量来解密它?

作为记录,整个 javascript 加密是这样的。

function rijndaelEncrypt(plaintext, key, mode) {
  var i, aBlock;
  var bpb = blockSizeInBits / 8;          // bytes per block
  var ct;                                 // ciphertext

  if (!plaintext || !key)
    return;
  if (key.length*8 != keySizeInBits)
    return; 
  if (mode == "CBC")
    ct = getRandomBytes(bpb);             // get IV
  else {
    mode = "ECB";
    ct = new Array();
  }

  // convert plaintext to byte array and pad with zeros if necessary. 
  plaintext = formatPlaintext(plaintext);

  var expandedKey = new keyExpansion(key);

  for (var block=0; block<plaintext.length / bpb; block++) {
    aBlock = plaintext.slice(block*bpb, (block+1)*bpb);
    if (mode == "CBC")
      for (var i=0; i<bpb; i++) 
        aBlock[i] ^= ct[block*bpb + i];
    ct = ct.concat(AESencrypt(aBlock, expandedKey));
  }

  return ct;
}

谢谢。非常感谢帮助。

4

1 回答 1

1

首先,ECB 模式没有初始化向量。我认为您可以将 null、空数组或由 0 填充的数组传递给您的 RijndaelManaged 对象。

对于此处的 CBC 模式实现,初始化向量是密文数组的第一个 128 位块。

 if (mode == "CBC")
    ct = getRandomBytes(bpb);             // get IV

这些在加密时填充随机字节,并在解密时从此处读取。

我不确定 RijndaelManaged 是否会为您输出初始化向量,只需查看输出大小即可。如果没有,请自行添加。

于 2011-08-21T00:17:48.577 回答