我正在使用javascript Fritz Schneider的Rijndael参考实现。我想用C#解密结果。
Javascript Rijndael函数中提供的输入变量是
function rijndaelEncrypt(plaintext, key, mode) {}
其中明文是要加密的文本,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;
}
感谢。非常感谢。
答案 0 :(得分:1)
首先,ECB模式没有初始化向量。我认为你可以将null,一个空数组或一个由0填充的数组传递给你的RijndaelManaged对象。
对于此处的CBC模式实现,初始化向量是密文数组的第一个128位块。
if (mode == "CBC")
ct = getRandomBytes(bpb); // get IV
这些在加密时填充了随机字节,并在解密时从这里读取。
我不确定RijndaelManaged是否会为您输出初始化向量,只需查看输出大小即可。如果没有,请自行添加。