Задать вопрос
dalv_happy
@dalv_happy

Как дешифровать по AES 128-CBC на Crypto-JS?

Добрый день!
Есть код на PHP, который дешифрует payload секретным ключом, пытаюсь написать точно такой же код на JavaScript, использую библиотеку crypto-js, но получаю не тот результат.

Первые 16 байт в payload - это вектор, оставшаяся часть - это полезная информация.
  1. Рабочий код на PHP – https://ideone.com/NJXkRK
  2. Нерабочий код на JS – https://codepen.io/perec200/pen/ExNXMpO

Помогите, пожалуйста, доработать код на JS
  • Вопрос задан
  • 929 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
@galaxy
...
  const data = aes_128_decrypt(encryption_key, base64_original);

  console.log(data);
}

function aes_128_decrypt(password, data) {
  let iv = data.substr(0, 16);
  let payload = data.substr(16);

  iv = CryptoJS.enc.Hex.parse(iv);
...


А где вы, собственно, сделали декодинг из base64?
Парсить hex тоже не надо.
Ответ написан
profesor08
@profesor08 Куратор тега PHP
1. decrypted.toString(CryptoJS.enc.Utf8)
2. ты портишь данные, либо не в нужной последовательности их преобразуешь.
3. Разные алгоритмы, надо уточнять по какому шифруется в js и в php

Потому как шифрование и дешифрование работает вот так:
let message = `{"store_id":20553036,"access_token":"secret_a9TmTJfRt3gyvxjJ9UwYjs9VQip3F7rp","public_token":"public_QQ99gUwVGdvKuZbLLyNZzDsvXF5iF3gh","view_mode":"PAGE","lang":"ru"}`;

let secret = `zcKf1Zt0UsO43S46Un3pxIgs91R1xMGs`;

const ciphertext = CryptoJS.AES.encrypt(message , secret).toString();
const bytes  = CryptoJS.AES.decrypt(ciphertext, secret);
const originalText = bytes.toString(CryptoJS.enc.Utf8);

console.log(ciphertext); 
console.log(originalText);


$message = '{"store_id":20553036,"access_token":"secret_a9TmTJfRt3gyvxjJ9UwYjs9VQip3F7rp","public_token":"public_QQ99gUwVGdvKuZbLLyNZzDsvXF5iF3gh","view_mode":"PAGE","lang":"ru"}';

$secret = "zcKf1Zt0UsO43S46Un3pxIgs91R1xMGs";

$ciphertext = openssl_encrypt($message, "aes-128-cbc", $secret);
$originalText = openssl_decrypt($ciphertext, "aes-128-cbc", $secret);

echo $ciphertext . PHP_EOL;
echo $originalText;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы