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 байтов строки. Я знаю, что это должно быть из-за внутривенного анализа, но я не могу найти где. И каждый раз, когда я пытаюсь, я получаю искаженные данные.