Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Artikel yang menerangkan secara terperinci cara melaksanakan penyulitan AES-128-CBC-PKCS5Padding dalam PHP

Artikel yang menerangkan secara terperinci cara melaksanakan penyulitan AES-128-CBC-PKCS5Padding dalam PHP

藏色散人
藏色散人ke hadapan
2021-09-01 15:49:065371semak imbas
Baru-baru ini, saya bertanggungjawab untuk melabuhkan API dalam kerja Semasa interaksi antara muka data, akan terdapat beberapa penghantaran data yang sensitif Untuk menjadikan interaksi data lebih selamat, data disulitkan.

Permintaan pihak satu lagi ialah

menyulitkan data perniagaan antara muka, dan kemudian AES-128-CBC-PKCS5Padding mengekod rentetan yang terhasil dan menyerahkannya, dan kunci serta kunci yang sepadan dengan kaedah penyulitan juga diberikan. Vektor permulaan (offset). Base64

Selepas pertama kali melihat kaedah penyulitan ini, saya mencari dalam pustaka fungsi PHP untuk melihat sama ada terdapat fungsi penyulitan yang sepadan Walau bagaimanapun, selepas mencari di sekeliling, saya mendapati bahawa saya tidak perlu melaksanakannya sendiri . Kemudian saya mengetahui bahawa Ia boleh dilaksanakan dengan sambungan fungsi mcrypt, tetapi fungsi mcrypt telah ditinggalkan sejak PHP 7.1.0 Saya amat disyorkan untuk tidak menggunakan fungsi ini fungsi OpenSSL di bahagian bawah manual Dengan memahami openssl_encrypt (data yang disulitkan ) Penemuan fungsi boleh memenuhi keperluan, sila baca manual untuk penggunaan khusus openssl_encrypt [Disyorkan:

Tutorial video PHP]

Fungsi pelaksanaan adalah seperti berikut:

  function encrypt($input, $key, $iv){
      return base64_encode(openssl_encrypt($input, 'AES-128-CBC', $key, OPENSSL_RAW_DATA,$iv));
  }

  // 解密
  function decrypt($input, $key, $iv){
      return openssl_decrypt(base64_decode($input), 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
  }

  // 测试加密 (我这里用的是json字符串)
  $dataJson = '[{"Code": "123123", "Name": "Bob", "Address": "\u94f6\u5ddd\u5e02"}, {"Code": "464776", "Name": "Hello", "Address": "\u5317\u4eac\u5e02"}]';
  print_r(encrypt($dataJson, $key, $iv));
  //u9Bd8oHXDGvjZcTIX9HK1r1q+aSu+/48gsfoGVrxoScZuX8yaj/xco8F2yHt2T987JNHil9LwjAmu9o5NJaicWQDaiKwMD5o70k1A9bGjDd71xb4hXRx3ddZwI85oTQQEUQLadR5C759SdaN8AOxlzH+yGlAWTOaEleulKoRTwaknG1NCM/qIRQ8gI5lzv+D

  // 测试解密
  $strr = 'u9Bd8oHXDGvjZcTIX9HK1r1q+aSu+/48gsfoGVrxoScZuX8yaj/xco8F2yHt2T987JNHil9LwjAmu9o5NJaicWQDaiKwMD5o70k1A9bGjDd71xb4hXRx3ddZwI85oTQQEUQLadR5C759SdaN8AOxlzH+yGlAWTOaEleulKoRTwaknG1NCM/qIRQ8gI5lzv+D';
  print_r(decrypt($strr, $key, $iv));
  // [{"Code": "123123", "Name": "Bob", "Address": "\u94f6\u5ddd\u5e02"}, {"Code": "464776", "Name": "Hello", "Address": "\u5317\u4eac\u5e02"}]
Saya lulus ujian kendiri dan duduk dan menunggu penyahpepijatan bersama dengan wajah bangga. Kemudian saya mula menulis tentang perniagaan lain Selepas beberapa hari, penyahpepijatan bersama mendapati bahawa pihak lain tidak dapat menyahsulit apa yang saya disulitkan, dan saya tidak dapat menyahsulit apa yang disulitkan oleh pihak lain Selepas mencari isu berkaitan di Google, saya menemui ayat, Maksud umum ialah dalam perpustakaan penyulitan mcrypt yang ditinggalkan, 128 sebenarnya merujuk kepada saiz blok dan bukannya saiz kunci, tetapi dalam aes-128-cbc dalam openssl, 128 merujuk kepada saiz kunci, iaitu, apabila menggunakan kunci 256-bit yang sah, semuanya adalah aes-256, dan jika anda ingin menukar mcrypt kepada kaedah penyulitan openssl, mcrypt's 128 perlu ditulis sebagai openssl's 256, jadi saya menukarnya dengan sikap mencuba aes-128-cbc adalah aes-256-cbc, dan kemudiannya dinyahpepijat, dan akhirnya mendapati bahawa penyahpepijatan bersama telah berlalu, tetapi butiran teknikal tertentu masih belum jelas dan kaji kemudian bila kita ada masa.

Atas ialah kandungan terperinci Artikel yang menerangkan secara terperinci cara melaksanakan penyulitan AES-128-CBC-PKCS5Padding dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam