Rumah  >  Soal Jawab  >  teks badan

Tajuk yang ditulis semula ialah: Versi PHP fungsi penyulitan aes CryptoJS

<p>Saya cuba mencipta PHP yang setara dengan kod JS ini menggunakan CryptoJS: </p> <pre class="brush:php;toolbar:false;">fungsi aesEncrypt (data) { kekunci const = 'GSTEGSTEjdfheyhdHSSHSHSHHHDHmdjjdn12ndndn5r='; const iv = ' const cipher = CryptoJS.AES.encrypt(data, CryptoJS.enc.Base64.parse(key), { iv: CryptoJS.enc.Utf8.parse(iv), // Parse IV padding: CryptoJS.pad.Pkcs7, mod: CryptoJS.mode.CBC }) kembalikan cipher.toString() }</pre> <p>Hasil kod js: pHjpwiyKq7Rf4dFcBMbm1w==</p> <p>Ini ialah kod PHP yang saya tulis dengan membaca soalan stackoverflow lain. Tetapi ia tidak mengembalikan hasil yang sama. </p> <pre class="brush:php;toolbar:false;">$plaintext = "plainTeks"; $method = 'aes-256-cbc'; $key = base64_encode("GSTEGSTEjdfheyhdHSHSHSHHHHHDHmdjjdn12ndndn5r="); $iv = hex2bin('0000000000000000000000000000000'); $ciphertext = openssl_encrypt( $plaintext, $kaedah, $kunci, OPENSSL_RAW_DATA, $iv ); $ciphertext = base64_encode($ciphertext); echo $ciphertext;</pre> <p>Hasil kod PHP: +YJOMi2vISmEXIjUZls3MA==</p>
P粉329425839P粉329425839387 hari yang lalu492

membalas semua(2)saya akan balas

  • P粉668019339

    P粉6680193392023-09-01 16:26:36

    Cuba ini:

    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;

    balas
    0
  • P粉639667504

    P粉6396675042023-09-01 15:35:49

    Dalam kod PHP, kunci mestilah Base64 disulitkan, bukan Base64 dikodkan:

    $key = base64_decode("GSTEGSTEjdfheyhdHSHSHSHDHHDHmdjjdn12ndndn5r=");
    

    Dengan perubahan ini, teks sifir yang diperlukan dicipta.

    Sila ambil perhatian bahawa jika dalam openssl_encrypt()调用的第四个参数中传递0而不是OPENSSL_RAW_DATA, teks sifir akan dikodkan Base64 secara lalai. Oleh itu, pengekodan Base64 secara eksplisit teks sifir adalah tidak diperlukan.


    Sila ingat bahawa IV statik tidak selamat. Biasanya semasa proses penyulitan, rawakIV dijana dan dihantar bersama teks sifir kepada pihak penyahsulitan (biasanya disambung bersama).

    balas
    0
  • Batalbalas