重寫後的標題為:PHP版本的CryptoJS aes加密函數
P粉329425839
P粉329425839 2023-08-31 23:20:42
0
2
478

我正在嘗試用CryptoJS創建一個與此JS代碼等效的PHP代碼:

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() }

js程式碼的結果:pHjpwiyKq7Rf4dFcBMbm1w==

這是我透過閱讀其他stackoverflow問題所寫的PHP程式碼。但是它沒有傳回相同的結果。

$plaintext = "plainText"; $method = 'aes-256-cbc'; $key = base64_encode("GSTEGSTEjdfheyhdHSHSHSHHDHmdjjdn12ndndn5r="); $iv = hex2bin('00000000000000000000000000000000'); $ciphertext = openssl_encrypt( $plaintext, $method, $key, OPENSSL_RAW_DATA, $iv ); $ciphertext = base64_encode($ciphertext); echo $ciphertext;

PHP程式碼的結果: YJOMi2vISmEXIjUZls3MA==

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,並將其與密文一起傳遞給解密方(通常是拼接在一起)。

      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!