Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyulitkan dan menyahsulit data dalam PHP?

Bagaimana untuk menyulitkan dan menyahsulit data dalam PHP?

WBOY
WBOYasal
2023-05-12 08:07:352862semak imbas

PHP ialah bahasa pengaturcaraan bahagian pelayan sumber terbuka yang digunakan secara meluas dalam bidang pembangunan web. Memandangkan aplikasi web sering melibatkan maklumat sensitif pengguna, seperti kata laluan, nombor kad bank, dsb., adalah amat penting untuk menyulitkan dan menyahsulit maklumat ini.

Artikel ini akan memperkenalkan cara menyulitkan dan menyahsulit data dalam PHP, terutamanya termasuk kandungan berikut:

  1. Algoritma penyulitan yang biasa digunakan dan ciri-cirinya
  2. Digunakan dalam PHP Penyulitan MD5
  3. Gunakan penyulitan sha1 dalam PHP
  4. Gunakan pengekodan base64 dalam PHP
  5. Gunakan perpustakaan sambungan openssl dalam PHP untuk penyulitan dan penyahsulitan AES
  6. Langkah-langkah untuk menggunakan perpustakaan sambungan mcrypt untuk penyulitan dan penyahsulitan AES dalam PHP

1 Algoritma penyulitan yang biasa digunakan dan ciri-cirinya

  1. Algoritma MD5: ringkasan mesej yang biasa digunakan Algoritma memetakan a. rentetan daripada sebarang panjang ke dalam nilai output 128-bit dan digunakan secara meluas dalam bidang seperti penyulitan data dan tandatangan elektronik.

Ciri-ciri: Algoritma MD5 tidak boleh diterbalikkan, iaitu nilai input tidak boleh disimpulkan daripada nilai output algoritma MD5 memastikan bahawa nilai output input yang sama adalah sama; mudah retak oleh serangan perlanggaran.

  1. Algoritma SHA1: Algoritma cincang selamat, serupa dengan MD5, yang memetakan rentetan dengan sebarang panjang ke dalam nilai output 160-bit, dengan keupayaan keselamatan dan antiperlanggaran yang baik.

Ciri: Algoritma SHA1 tidak boleh diterbalikkan; panjang nilai output algoritma SHA1 lebih panjang daripada algoritma MD5, memastikan keselamatan yang lebih baik tidak dapat menghalang serangan perlanggaran sepenuhnya;

  1. pengekodan base64: Kaedah pengekodan yang mengekod data perduaan ke dalam aksara ASCII yang boleh dibaca secara meluas Ia digunakan secara meluas dalam e-mel, protokol HTTP dan medan lain.

Ciri-ciri: pengekodan base64 bukan algoritma penyulitan sebenar, hanya kaedah pengekodan base64 tidak mengubah kandungan data, tetapi hanya mengubah perwakilan data yang boleh meningkatkan kestabilan penghantaran data dan keselamatan.

  1. Algoritma AES: Piawaian Penyulitan Lanjutan, algoritma penyulitan simetri yang digunakan untuk melindungi keselamatan data seperti maklumat sensitif. Algoritma AES dibahagikan kepada tiga panjang kunci: 128 bit, 192 bit dan 256 bit.

Ciri-ciri: Algoritma AES ialah penyulitan simetri, dan kunci yang sama digunakan untuk penyulitan dan penyahsulitan; algoritma AES mempunyai keselamatan dan kecekapan yang lebih baik; lebih tinggi keselamatannya.

2. Gunakan penyulitan MD5 dalam PHP

Gunakan fungsi md5() dalam PHP untuk menyulitkan rentetan dengan MD5 Kod sampel adalah seperti berikut:

$str = "hello world";
$encrypted_str = md5($str);
echo $encrypted_str;

Hasil output ialah:

5eb63bbbe01eeed093cb22bb8f5acdc3

3. Gunakan penyulitan sha1 dalam PHP

Gunakan fungsi sha1() dalam PHP untuk menyulitkan rentetan SHA1 adalah seperti berikut:

rreee

The hasil output ialah :

$str = "hello world";
$encrypted_str = sha1($str);
echo $encrypted_str;

4. Gunakan pengekodan base64 dalam PHP

Gunakan fungsi base64_encode() dalam PHP untuk mengekod rentetan base64 dan gunakan fungsi base64_decode() untuk mengekod rentetan base64 . Penyahkodan, kod sampel adalah seperti berikut:

2ef7bde608ce5404e97d5f042f95f89f1c232871

5. Gunakan perpustakaan sambungan openssl dalam PHP untuk penyulitan dan penyahsulitan AES

Gunakan perpustakaan sambungan openssl dalam PHP untuk melaksanakan penyulitan dan penyahsulitan AES data, kod sampel Seperti berikut:

$str = "hello world";
$encoded_str = base64_encode($str);
echo $encoded_str . "
";  // 输出:aGVsbG8gd29ybGQ=
$decoded_str = base64_decode($encoded_str);
echo $decoded_str;    // 输出:hello world

Hasil output ialah:

// AES加密
function encrypt($str, $key) {
    $iv_size = openssl_cipher_iv_length('AES-256-CBC');
    $iv = openssl_random_pseudo_bytes($iv_size);   // 生成随机IV
    $encrypted_str = openssl_encrypt($str, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
    $result = base64_encode($iv . $encrypted_str);
    return $result;
}

// AES解密
function decrypt($encrypted_str, $key) {
    $encrypted_str = base64_decode($encrypted_str);
    $iv_size = openssl_cipher_iv_length('AES-256-CBC');
    $iv = substr($encrypted_str, 0, $iv_size);
    $encrypted_str = substr($encrypted_str, $iv_size);
    $result = openssl_decrypt($encrypted_str, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
    return $result;
}

// 测试代码
$key = "12345678901234567890123456789012";   // AES密钥,32位
$str = "hello world";
$encrypted_str = encrypt($str, $key);
echo $encrypted_str . "
";
$decrypted_str = decrypt($encrypted_str, $key);
echo $decrypted_str . "
";

6. Langkah-langkah untuk menggunakan perpustakaan sambungan mcrypt untuk penyulitan dan penyahsulitan AES dalam PHP

Gunakan perpustakaan sambungan mcrypt untuk penyulitan dan penyahsulitan AES Langkah-langkah untuk penyahsulitan adalah seperti berikut:

  1. Muatkan perpustakaan sambungan mcrypt
7KdkeT91N7zg8WZrZ1Oehg==xsYlbGhMF8dNQXH1LqTwVw==
hello world
  1. Jana IV rawak
extension_loaded('mcrypt');  // 检查是否已经加载mcrypt扩展库
  1. Gunakan fungsi mcrypt_encrypt( ) untuk penyulitan AES
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
  1. Gunakan fungsi mcrypt_decrypt() untuk penyahsulitan AES
rreee
  1. Gunakan fungsi base64_encode() untuk mengekodkan base64 data yang disulitkan
$encrypted_str = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_CBC, $iv);
  1. Gunakan fungsi substr() untuk memintas bahagian IV dan teks sifir dalam data yang disulitkan
$decrypted_str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encrypted_str, MCRYPT_MODE_CBC, $iv);

Kod sampel penyulitan dan penyahsulitan AES yang lengkap adalah seperti berikut:

$encrypted_str = base64_encode($iv . $encrypted_str);

Hasil output ialah:

$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = substr($encrypted_str, 0, $iv_size);
$encrypted_str = substr($encrypted_str, $iv_size);

Ringkasan:

Di atas ialah kaedah data penyulitan dan penyahsulitan dalam PHP Algoritma penyulitan yang berbeza mempunyai ciri-ciri yang berbeza dan senario yang boleh digunakan hendaklah memilih kaedah penyulitan yang sesuai berdasarkan keperluan sebenar dan keperluan keselamatan. Semasa menggunakan kaedah penyulitan, anda juga perlu memberi perhatian kepada perlindungan keselamatan kunci dan proses penyulitan untuk mengelak daripada diserang oleh penggodam.

Atas ialah kandungan terperinci Bagaimana untuk menyulitkan dan menyahsulit data dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn