AES-128-CB C расшифровка возвращает неправильное значение - PullRequest
1 голос
/ 24 февраля 2020

Я пытался создать расшифровку AES-128-CB C с помощью javascript

. Здесь я так и сделал:

    <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-base64-min.js"></script>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script>
<script>
 var rawStr = "MyPassword";
      var secret = 'EL12ec@REteLe(0M';
      var wordArray = CryptoJS.enc.Utf8.parse(rawStr);
      var base64 = CryptoJS.enc.Base64.stringify(wordArray);
      var encrypted = '' + CryptoJS.AES.encrypt(base64, secret);
      console.log('base64:', base64);
      console.log('encrypted:', encrypted);
</script>

Но полученное значение: TXlQYXNzd29yZA==

Правильное значение: S9bEDxeu/jr+8CdRkiUEog== на основе этих онлайн-инструментов шифрования: https://www.devglan.com/online-tools/aes-encryption-decryption

Любой может помочь мне, как добиться этого, чтобы получить тот же результат шифрование так же, как инструменты Devglan?

Спасибо,

1 Ответ

0 голосов
/ 24 февраля 2020

Для воспроизведения результата сайта необходимо учитывать следующее:

  • Ключ должен быть передан CryptoJS.AES.encrypt как WordArray. В противном случае он интерпретируется как кодовая фраза, здесь .
  • Режим CB C (по умолчанию Crypto JS, здесь ) требует IV, который должен быть передается CryptoJS.AES.encrypt как WordArray (если IV не указан на веб-сайте, неявно используется 0 -вектор).
  • Возвращаемое значение CryptoJS.AES.encrypt является объектом CipherParams, который инкапсулирует зашифрованный текст среди прочего, здесь .

var rawStr = "MyPassword";
var secret = CryptoJS.enc.Utf8.parse('EL12ec@REteLe(0M');
var iv = CryptoJS.enc.Utf8.parse('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0');
var encrypted = CryptoJS.AES.encrypt(rawStr, secret, {iv: iv});
console.log('Output:',  CryptoJS.enc.Base64.stringify(encrypted.ciphertext)); // Output: S9bEDxeu/jr+8CdRkiUEog==
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9/crypto-js.min.js"></script>
...