gpt4 book ai didi

javascript - 使用 Php、javascript 的 AES 加密,反之亦然

转载 作者:行者123 更新时间:2023-11-29 23:28:52 26 4
gpt4 key购买 nike

我正在使用 JavaScript 进行客户端加密,使用 PHP 进行服务器端加密。双方都使用相同的 key 和 IV。

PHP 加密:

$string='test data';

$output = '';
$encrypt_method = 'AES-256-CBC';
$secret_key = 'secret key in hex';
$secret_iv = 'iv in hex';
$key = hash('sha256',$secret_key);

$output = openssl_encrypt($string,$encrypt_method,$key,0,$initialization_vector);

//Encrypted text in php
$output = base64_encode($output);

Javascript 加密代码:

var key = 'secret key in hex';
key = CryptoJS.SHA256(key);
var ivHex = CryptoJS.enc.Hex.parse(' IV in hex ');
var options = { mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, iv:ivHex};
var obj='test data';
var encrypted = CryptoJS.AES.encrypt(obj,key ,options);
var encryptedBase64 = encrypted.toString();

//Encrypted text in javascript
console.log(encryptedBase64);

两者都给出不同的输出。我做错了什么吗?

最佳答案

  1. $secret_iv 已定义,但在 openssl_encrypt() 中使用了未定义的 $initialization_vector
  2. 对于第四个参数,你不想传递0,你想传递OPENSSL_RAW_DATA(常量)。
  3. 您在 PHP 中传递 hash('sha256', $secret_key) 但在 Javascript 中直接使用 secret_key
    • 注意:您的 key 派生 (hash('sha256', $some_text_input)) 非常薄弱。请考虑改用 PBKDF2-SHA256。

重要提示:没有 HMAC 的 AES-CBC 容易受到 padding-oracle attacks 的攻击。 .你应该always use authenticated encryption .

安全加密的示例类似于 this .解密有点复杂。

关于javascript - 使用 Php、javascript 的 AES 加密,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48032546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com