CryptoJS.AES, пропущено 16 первых байтов текста

Я реализую CryptoJS.AES на js, где программа должна зашифровать данные и отправить их на сервер python.

Расшифровка работает, так как она расшифровывает данные, закодированные с моего сервера Python. Проблема в том, что я пытаюсь зашифровать данные из части js: когда я пытаюсь расшифровать их снова, первые 16 байтов отсутствуют (и то же самое с сервера python). И я понятия не имею, почему, но это должно быть из-за манипулирования данными в зашифрованном виде;,

Вот мой код:

AKEY    = 'd872eebd3967a9a00bdcb7235b491d87'

var base64ciphertextFromPython = "0Qia1xfdjNTnZPm33LZWJHw7g/mvJLyk6ado/Dk7bKMi7NWOl87tyK+bzDHlQB9JjuOMzT8n9BMyh4RQkA7v1MHeAah/d0eL6jauTuoyamU=";
var key = CryptoJS.enc.Utf8.parse(AKEY);

function encrypt(message){
  var ciphertext = CryptoJS.enc.Base64.parse(message);

  // split iv and ciphertext
  var iv      = ciphertext.clone();
  iv.sigBytes = 16;
  iv.clamp();
  ciphertext.words.splice(0, 4); // delete 4 words = 16 bytes
  ciphertext.sigBytes -= 16;

  var encrypted = CryptoJS.AES.encrypt(message, key, {
        iv: iv,
        mode: CryptoJS.mode.CFB
      });

  return encrypted
}

function decrypt(messageBase64){
  var ciphertext = CryptoJS.enc.Base64.parse(messageBase64);

  // split iv and ciphertext
  var iv = ciphertext.clone();
  iv.sigBytes = 16;
  iv.clamp();
  ciphertext.words.splice(0, 4); // delete 4 words = 16 bytes
  ciphertext.sigBytes -= 16;

  var decrypted = CryptoJS.AES.decrypt({ciphertext: ciphertext}, key, {
        iv: iv,
        mode: CryptoJS.mode.CFB
      });

  return decrypted;
}

var apirequestkey  = encrypt("d872eebd3967a9a00bdcb7235b491d87|2017-11-06_15:43:42");
var py_decrypted   = decrypt(base64ciphertextFromPython)
var js_decrypted   = decrypt(apirequestkey.toString());

console.log("ENCRYPT", apirequestkey.toString());
console.log("DECRYPT PY", py_decrypted.toString(CryptoJS.enc.Utf8));
console.log("DECRYPT JS", js_decrypted.toString(CryptoJS.enc.Utf8));

выход:

ENCRYPT oxLR//ekK64y0jZMWe2Wa7rvZlP3CbNCajLNly3WTUZZ6F8olmRPrguyI9ifpXAZSO0h/Wwr+AiCPjON6Ej57w==
DECRYPT PY d872eebd3967a9a00bdcb7235b491d87|2017-11-06_16:23:41
DECRYPT JS 0bdcb7235b491d87|2017-11-06_15:43:42

Расшифровывать JS пропускает первые 16 байтов строки. Я знаю, что это должно быть из-за внутривенного анализа, но я не могу найти где. И каждый раз, когда я пытаюсь, я получаю искаженные данные.

0 ответов

Другие вопросы по тегам