首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP加密(密钥大小为128 / 8)等效于CryptoJS

PHP加密(密钥大小为128 / 8)等效于CryptoJS
EN

Stack Overflow用户
提问于 2022-02-28 12:24:19
回答 1查看 1.2K关注 0票数 0

我是PHP的新手,我试图在PHP中实现等效的CryptoJS AES加密。我看到了这个post,但不幸的是,我无法实现同样的目标。我在PHP代码中以加密字符串的形式得到了不同的输出。

我哪里出错了?

Javascript代码

代码语言:javascript
复制
const customerObject = {
  CustomerName: "test",
  EmailID: "tester@test.com",
  Street: "Test",
  City: "London",
  Country: "United Kingdom",
  ZipCode: "XXX XXX",
};

const token = "8056483646328123";

const key = CryptoJS.enc.Utf8.parse(token);
const iv = CryptoJS.enc.Utf8.parse(token);

const returnEncrypted = CryptoJS.AES.encrypt(
  CryptoJS.enc.Utf8.parse(customerObject),
  key,
  {
    iv: iv,
    keySize: 128 / 8,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7,
  }
);

PHP代码

代码语言:javascript
复制
 <?php
    
    $customer = [
       'CustomerName' => "test",
       'EmailID' => "tester@test.com",
       'Street' => "Test",
       'City' => "London",
       'Country' => "United Kingdom",
       'ZipCode' => "XXX XXX",
    ];
    
    
    $plaintext  = json_encode($customer);
    $method     = 'AES-128-CBC';
    
    $key = hex2bin("8056483646328123");
    $iv  = hex2bin("8056483646328123");
    
    $ciphertext = openssl_encrypt(
       $plaintext,
       $method,
       $key,
       OPENSSL_RAW_DATA,
       $iv
    );
    
    
    $ciphertext = base64_encode($ciphertext);

    echo $ciphertext;
    
    ?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-28 14:15:06

正如@Topaco在注释中指出的,不能对IV进行十六进制解码,即删除hex2bin()。

修正后的代码如下所示。

代码语言:javascript
复制
<?php
    
    $customer = [
       'CustomerName' => "test",
       'EmailID' => "tester@test.com",
       'Street' => "Test",
       'City' => "London",
       'Country' => "United Kingdom",
       'ZipCode' => "XXX XXX",
    ];
    
    
    $plaintext  = json_encode($customer);
    $method     = 'AES-128-CBC';
    
    $key = "8056483646328123";
    $iv  = "8056483646328123";
    
    $ciphertext = openssl_encrypt(
       $plaintext,
       $method,
       $key,
       OPENSSL_RAW_DATA,
       $iv
    );
    
    
    $ciphertext = base64_encode($ciphertext);

    echo $ciphertext;
    
    ?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71295004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档