Как перевести шифрование openssl encrypt с PHP на JS?

Ссылка скопирована
18 апреля 2026 1 ответ

Есть код на PHP:

$data = '{"message": 123}'; $secret_key = 'test'; $secret_iv = 'test; $method = "AES-192-CBC"; $iv = substr(hash('sha256', $secret_iv), 0, 16); $encrypted = openssl_encrypt($data, $method, $secret_key,0,$iv);

$data = '{"message": 123}'; $secret_key = 'test'; $secret_iv = 'test; $method = "AES-192-CBC"; $iv = substr(hash('sha256', $secret_iv), 0, 16); $encrypted = openssl_encrypt($data, $method, $secret_key,0,$iv);

Можно ли перевести его по аналогии на JS?
Пробовал с crypto-js почему то не то получается

Дополнительно:

let data = '{"message": 123}';
let secret_key = 'test';
let secret_iv = 'test';
let method = "AES-192-CBC";
let iv = CryptoJS.enc.Hex.parse(CryptoJS.SHA256(secret_iv).toString().substr(0, 32));
let encrypted = CryptoJS.AES.encrypt(data, CryptoJS.enc.Utf8.parse(secret_key), { iv: iv });

console.log(encrypted.toString());

  • js на фронте или бэке?
  • Михаил Р., фронт
  • Фрагменты кода надо размещать в виде текста и оборачивать тэгом code для корректного отображения. Удобно делать кнопкой </>
    Это обязательно, см.п.3.8 Регламента.
    Сюда же относится traceback, ввод и вывод в консоли и другая структурированная текстовая инфа.
  • Олег, Да я так и пробовал, но результат данного метода отличается от того что на php
  • CarlCoks, у него там неточность небольшая - .substr(0, 32) а должно по идее быть .substr(0, 16)
  • Ответы:

    HTML+JS

    &lt;html&gt; &lt;head&gt;     &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"&gt;&lt;/script&gt;&lt;/head&gt; &lt;body&gt; &lt;script&gt;     var data = '{"message": 123}';     var secret_key = 'test';     var secret_iv = 'test';     var method = "AES-192-CBC";     var iv = CryptoJS.SHA256(secret_iv).toString().substring(0, 16);     var encrypted = CryptoJS.AES.encrypt(data, secret_key, {iv: iv, mode: CryptoJS.mode.CBC}).toString();      console.log(encrypted); &lt;/script&gt; &lt;/body&gt; &lt;/html&gt;

    &lt;html&gt; &lt;head&gt; &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"&gt;&lt;/script&gt;&lt;/head&gt; &lt;body&gt; &lt;script&gt; var data = '{"message": 123}'; var secret_key = 'test'; var secret_iv = 'test'; var method = "AES-192-CBC"; var iv = CryptoJS.SHA256(secret_iv).toString().substring(0, 16); var encrypted = CryptoJS.AES.encrypt(data, secret_key, {iv: iv, mode: CryptoJS.mode.CBC}).toString(); console.log(encrypted); &lt;/script&gt; &lt;/body&gt; &lt;/html&gt;

    Если фронт собирается (используем import)
    Код

    import CryptoJS from 'crypto-js';  const data = '{"message": 123}'; const secret_key = 'test'; const secret_iv = 'test'; const method = 'AES-192-CBC'; const iv = CryptoJS.SHA256(secret_iv).toString().substring(0, 16); const encrypted = CryptoJS.AES.encrypt(data, secret_key, { iv: iv, mode: CryptoJS.mode.CBC }).toString();  console.log(encrypted);

    import CryptoJS from 'crypto-js'; const data = '{"message": 123}'; const secret_key = 'test'; const secret_iv = 'test'; const method = 'AES-192-CBC'; const iv = CryptoJS.SHA256(secret_iv).toString().substring(0, 16); const encrypted = CryptoJS.AES.encrypt(data, secret_key, { iv: iv, mode: CryptoJS.mode.CBC }).toString(); console.log(encrypted);

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Сергей Миронов Ответ

    Для перевода шифрования openssl encrypt с PHP на JS существует несколько способов. Один из них - использование библиотеки CryptoJS в JavaScript.

    Ниже приведен пример кода на PHP, который использует функцию openssl_encrypt для шифрования данных:

    $data = "Hello, World!";
    $key = "my_secret_key";
    $iv = openssl_random_pseudo_bytes(16);
    $encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv);

    $data = "Hello, World!"; $key = "my_secret_key"; $iv = openssl_random_pseudo_bytes(16); $encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv);

    Чтобы перевести этот код на JavaScript с использованием CryptoJS, необходимо сначала подключить библиотеку CryptoJS к вашему проекту. Затем можно использовать следующий код для шифрования данных:

    var data = "Hello, World!";
    var key = CryptoJS.enc.Utf8.parse("my_secret_key");
    var iv = CryptoJS.lib.WordArray.random(16);
    var encrypted = CryptoJS.AES.encrypt(data, key, { iv: iv }).toString();

    var data = "Hello, World!"; var key = CryptoJS.enc.Utf8.parse("my_secret_key"); var iv = CryptoJS.lib.WordArray.random(16); var encrypted = CryptoJS.AES.encrypt(data, key, { iv: iv }).toString();

    Обратите внимание, что в этом примере ключ и вектор инициализации (IV) должны быть преобразованы в правильный формат для CryptoJS. Кроме того, алгоритм шифрования и режим работы должны быть указаны правильно.

    Это лишь один из способов перевода шифрования openssl encrypt с PHP на JS. В зависимости от ваших конкретных потребностей и требований безопасности, возможно, потребуется использовать другие библиотеки или методы шифрования. Не забудьте также обеспечить безопасное хранение ключей и других конфиденциальных данных.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно