Я пытаюсь расшифровать зашифрованный AES-256 Base64-кодированный data
. Эта часть моего JS кода:Неверное количество значительных байтов при расшифровке AES CFB с CryptoJS
var data = "Ic9OcXxn2MnpgFwH4SHkxSY3laYB+kkevevwOPeQjLEeUsAVcHzLdBJZ1liWK5d94I/uNwyzbk+/l6QH/WsU0mzxuXcqBYl4iRIA7UIfchYJTsoaWAnSIjsioFUBAfc8YCODID0HW4AY7nK6Bb0mTP55HxlWstE92w1uJVMmBmJRscrAxySNlAFzVVGxuiiCc3sJimfbMNajXOUeFgvSzw==";
var base64data = CryptoJS.enc.Base64.parse(data);
var encrypted = new CryptoJS.lib.WordArray.init(base64data.words.slice(4));
var iv = new CryptoJS.lib.WordArray.init(base64data.words.slice(0, 4));
var key = CryptoJS.enc.Utf8.parse("secure%password!secure%password!");
var cipher = CryptoJS.lib.CipherParams.create({
ciphertext: encrypted
});
var decrypted = CryptoJS.AES.decrypt(cipher, key, {
iv: iv,
mode: CryptoJS.mode.CFB
});
var result = decrypted.toString(CryptoJS.enc.Utf8);
console.log(decrypted.toString(CryptoJS.enc.Utf8));
// Wrong Output: {"first_name": "Han
console.log(decrypted.sigBytes);
decrypted.sigBytes = 144
console.log(decrypted.toString(CryptoJS.enc.Utf8)); // Correct
// Correct Output: {"first_name": "Hans-J\u00fcrgen", "last_name": "M\u00fcller", "city": "Hamburg", "number": "20a", "zip": "20456", "street": "Ladenstra\u00dfe"}
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/mode-cfb.js"></script>
Первый выход из WordBuffer
приводит только часть расшифрованных данных, так как значимые байты устанавливаются на 19 вместо 144. После исправления этой , выход неправильный.
Почему я должен исправить руководство sigBytes? Есть идеи? Спасибо!