Как перевести шифрование openssl encrypt с PHP на JS?
Есть код на 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());
Это обязательно, см.п.3.8 Регламента.
Сюда же относится traceback, ввод и вывод в консоли и другая структурированная текстовая инфа.
Ответы:
HTML+JS
<html> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script></head> <body> <script> 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); </script> </body> </html> |
<html> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script></head> <body> <script> 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); </script> </body> </html>
Если фронт собирается (используем 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);
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для перевода шифрования 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);
Чтобы перевести этот код на 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();
Обратите внимание, что в этом примере ключ и вектор инициализации (IV) должны быть преобразованы в правильный формат для CryptoJS. Кроме того, алгоритм шифрования и режим работы должны быть указаны правильно.
Это лишь один из способов перевода шифрования openssl encrypt с PHP на JS. В зависимости от ваших конкретных потребностей и требований безопасности, возможно, потребуется использовать другие библиотеки или методы шифрования. Не забудьте также обеспечить безопасное хранение ключей и других конфиденциальных данных.