Взаимодействие между Javascript «Реализованная реализация Фрица Шнайдера Rijndael» и .NET - PullRequest
1 голос
/ 21 августа 2011

Я использую справочную реализацию Рейндаля Фрица Шнайдера. Я хочу расшифровать результат в C #.

Входные переменные, представленные в функции Javascript Rijndael:

function rijndaelEncrypt(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;
}

Спасибо. Помощь очень ценится.

1 Ответ

1 голос
/ 21 августа 2011

Во-первых, режим ECB не имеет вектора инициализации. Я думаю, что вы можете передать null, пустой массив или массив, заполненный 0, вашему объекту RijndaelManaged.

Для вашей реализации режима CBC вектор инициализации является первым 128-битным блоком массива зашифрованного текста.

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

Они заполнены случайными байтами при шифровании и читаются отсюда при расшифровке.

Я не уверен, что RijndaelManaged выведет для вас вектор инициализации, просто взгляните на размер вывода. Если нет, добавьте его сами.

...