重写后的标题为:PHP版本的CryptoJS aes加密函数
P粉329425839
P粉329425839 2023-08-31 23:20:42
0
2
562
<p>我正在尝试用CryptoJS创建一个与此JS代码等效的PHP代码:</p> <pre class="brush:php;toolbar:false;">function aesEncrypt (data) { const key = 'GSTEGSTEjdfheyhdHSHSHSHDHHDHmdjjdn12ndndn5r='; const iv = '\0'; const cipher = CryptoJS.AES.encrypt(data, CryptoJS.enc.Base64.parse(key), { iv: CryptoJS.enc.Utf8.parse(iv), // 解析IV padding: CryptoJS.pad.Pkcs7, mode: CryptoJS.mode.CBC }) return cipher.toString() }</pre> <p>js代码的结果:pHjpwiyKq7Rf4dFcBMbm1w==</p> <p>这是我通过阅读其他stackoverflow问题编写的PHP代码。但是它没有返回相同的结果。</p> <pre class="brush:php;toolbar:false;">$plaintext = "plainText"; $method = 'aes-256-cbc'; $key = base64_encode("GSTEGSTEjdfheyhdHSHSHSHDHHDHmdjjdn12ndndn5r="); $iv = hex2bin('00000000000000000000000000000000'); $ciphertext = openssl_encrypt( $plaintext, $method, $key, OPENSSL_RAW_DATA, $iv ); $ciphertext = base64_encode($ciphertext); echo $ciphertext;</pre> <p>PHP代码的结果:+YJOMi2vISmEXIjUZls3MA==</p>
P粉329425839
P粉329425839

全部回复(2)
P粉668019339

尝试这个:

function encryptData($data, $key, $iv) {
  $cipher = "aes-256-cbc";
  $options = OPENSSL_RAW_DATA;

  $encrypted = openssl_encrypt($data, $cipher, $key, $options, $iv);
  $encrypted = base64_encode($encrypted);

  return $encrypted;
}

$message = "消息";
$key = "我的秘密密钥";
$iv = "我的iv";

$encrypted = encryptData($message, $key, $iv);

echo $encrypted;
P粉639667504

在PHP代码中,密钥必须进行Base64 码,而不是Base64编码:

$key = base64_decode("GSTEGSTEjdfheyhdHSHSHSHDHHDHmdjjdn12ndndn5r=");

通过这个改变,所需的密文被创建出来。

请注意,如果在openssl_encrypt()调用的第四个参数中传递0而不是OPENSSL_RAW_DATA,则密文默认会进行Base64编码。因此,明确对密文进行Base64编码是不必要的。


请记住,静态IV是不安全的。通常在加密过程中,会生成一个随机的IV,并将其与密文一起传递给解密方(通常是拼接在一起)。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板