Php openssl_encrypt (aes-256-cbc) к node.js cryptojs.aes.decrypt приводит к пустой строкеPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Php openssl_encrypt (aes-256-cbc) к node.js cryptojs.aes.decrypt приводит к пустой строке

Сообщение Anonymous »

Я работаю над задачей, которая требует расшифровки данных, зашифрованных PHP API с использованием node.js. Используемый метод шифрования является AES-256-CBC с кодированием BASE64. Я боролся с этим в течение двух дней, и дешифрование постоянно приводит к пустой строке. Я использовал AI для генерации начального кода php и node.js, и я внес некоторые корректировки на основе предыдущих попыток отладки (в частности, добавления openssl_raw_data к функции php openssl_encrypt). < /P>
Несмотря на эти усилия, поле, которое накапливается на стороне Php, Decrypts на nothers -nepts на nots. сторона. < /p>
Я ожидал, что поле категории будет «фаст -фудом», но он был возвращен как пустая строка ('') вместо этого. < /p>
output:
{
«id»: 1,
ement »:« Burger »,
« Сообщение »:« Данные ». />} < /p>
Вот мой код PHP API (api.php):

< /code>
и вот мой клиент -код javascript (node.js) (client.js):
// client.js

// 1. Import necessary library
const CryptoJS = require('crypto-js');
// fetch is built-in since Node.js v18+.
// For older versions, import like this: const fetch = require('node-fetch');

// --- 2. Configuration ---
// Key must match the PHP side exactly!
const SECRET_KEY = 'MySuperSecretKeyForThisTest1234';
const API_URL = 'http://localhost/crypto-test/api.php';

// --- 3. Decryption function ---
function decryptData(base64Payload, key) {
try {
// Convert our Key to a format CryptoJS understands
const key_utf8 = CryptoJS.enc.Utf8.parse(key);

// **IMPORTANT:** Decode Base64 first
const encrypted_data_with_iv = CryptoJS.enc.Base64.parse(base64Payload);

// Separate IV from the encrypted data
// AES-256-CBC IV is 16 bytes long
const iv_size = 16;
const iv = CryptoJS.lib.WordArray.create(encrypted_data_with_iv.words.slice(0, iv_size / 4));
const encrypted_data = CryptoJS.lib.WordArray.create(encrypted_data_with_iv.words.slice(iv_size / 4));

// Decrypt
const decrypted = CryptoJS.AES.decrypt(
{ ciphertext: encrypted_data },
key_utf8,
{ iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }
);

// Convert the result back to a String (UTF-8)
return decrypted.toString(CryptoJS.enc.Utf8);
} catch (error) {
console.error("Decryption Error:", error);
return "Decryption failed!";
}
}

// --- 4. Main function to call API and display results ---
async function main() {
console.log("🚀 Calling API from:", API_URL);

try {
const response = await fetch(API_URL);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();

console.log("\n📬 Raw data received from API:");
console.log(data);

// Decrypt the encrypted data
const encryptedCategory = data.category_encrypted;
const decryptedCategory = decryptData(encryptedCategory, SECRET_KEY);
console.log(`\n🔑 Decrypted data: ${decryptedCategory}`); // Added for direct decrypted output

// Prepare final data for display
const finalResult = { ...data, category: decryptedCategory };
delete finalResult.category_encrypted;

console.log("\n✅ Result after decryption:");
console.log(finalResult);

} catch (error) {
console.error("\n❌ Error connecting to API or processing:", error.message);
}
}

// Start execution!
main();


Подробнее здесь: https://stackoverflow.com/questions/796 ... lts-in-emp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Cryptojs.aes.encrypt () и Java AES шифрование, давая разные результаты
    Гость » » в форуме JAVA
    0 Ответы
    22 Просмотры
    Последнее сообщение Гость
  • Cryptojs.aes.encrypt () и Java AES шифрование, давая разные результаты
    Гость » » в форуме Javascript
    0 Ответы
    33 Просмотры
    Последнее сообщение Гость
  • Cryptojs.aes.encrypt () и Java AES шифрование, давая разные результаты
    Anonymous » » в форуме JAVA
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Cryptojs.aes.encrypt () и Java AES шифрование, давая разные результаты
    Anonymous » » в форуме JAVA
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Как зашифровать открытый текст с помощью AES-256 CBC в PHP с помощью OpenSSL?
    Anonymous » » в форуме Php
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»