Rumah >pembangunan bahagian belakang >tutorial php >Penyulitan PHP
Penyulitan PHP tidak lain hanyalah mencapai kod penyulitan dengan bantuan beberapa algoritma yang kadangkala dipanggil algoritma pencincangan dan ia biasanya berfungsi dengan mengambil rentetan atau beberapa input lain dan kemudian ia akan membantu dalam mencipta cap jari unik daripada rentetan /lain. Penyulitan melibatkan menukar teks tertentu/lain-lain kepada beberapa teks kod yang berbeza atau lain-lain hanya untuk memastikan data selamat tanpa sebarang pendedahan kepada kebanyakan orang kecuali kepada sesetengah orang yang mempunyai akses. Lihat pelbagai jenis kaedah Penyulitan PHP di bawah.
IKLAN Kursus Popular dalam kategori ini PEMBANGUN PHP - Pengkhususan | 8 Siri Kursus | 3 Ujian Olok-olokMulakan Kursus Pembangunan Perisian Percuma Anda
Pembangunan web, bahasa pengaturcaraan, ujian perisian & lain-lain
Terdapat pelbagai jenis kaedah penyulitan dalam penggunaan masa kini tetapi lazimnya ia adalah dengan pencincangan, dan yang kedua ialah penyulitan kunci rahsia dan yang ketiga ialah kaedah Penyulitan Sampul. Bagi setiap kaedah penyulitan akan mempunyai beberapa algoritma atau cipher berbilang untuk dipilih daripada setiap satu (untuk setiap kaedah ini akan mempunyai kelemahan dan kekuatan mereka sendiri). Di sini kita akan menumpukan pada pelaksanaan pencincangan dan penyulitan kunci rahsia.
Algoritma Hashing Bahasa Pengaturcaraan PHP biasanya mengambil satu nilai input dan kemudian mengubahnya menjadi satu ringkasan mesej. Secara ringkas/lebih banyak teks biasa -nilai akan diubah menjadi panjang cincang tetap dan ia hanya boleh disahkan hanya dengan memintas satu nilai asal kepada algoritma pencincangan yang unik. Ini akan menjadikan pencincangan sempurna hanya untuk menyimpan semua kata laluan pengguna.
Perlu diingat bahawa pencincangan bukanlah penyelesaian kalis peluru untuk pertanyaan kami tetapi sesetengahnya tidak akan mempunyai semua algoritma pencincangan yang sama. Kami telah mempertimbangkan algoritma MD5 dan SHA1 yang cekap dan pantas, dan kemudian menjadikan semua perkara itu sesuai untuk pengesahan fail dan checksumming. Kelajuan mereka menjadikan kebanyakan mereka tidak sesuai untuk mencincang kata laluan pengguna. Dengan kuasa pengiraan GPU moden, kata laluan akan dipecahkan hanya dengan bantuan kekerasan dalam beberapa minit yang mudah dan hanya dengan mendedahkan kata laluan/kata laluan teks biasa asal dan dengan sengaja algoritma/algoritma pencincangan yang lebih perlahan seperti bcrypt atau Argon2 akan digunakan.
Mencincang kata laluan yang dijana dengan algoritma maka ia akan mengaburkan pasti data sebenar dan asal dan kemudian ia akan memperlahankan penyerang manakala pembangun harus mencuba satu algoritma terkuat yang tersedia. Bahasa PHP akan mempunyai sintaks asas iaitu password_hash().
Ini adalah contoh penggunaan teknik pencincangan ‘bcrypt’.
Kod:
<?php $str1 = 'Password'; $options1 = [ 'cost1' => 10, 'salt1' => '$P27r06o9!nasda57b2M22' ]; echo sprintf("The Result of crypt() function on %s is %s\n", $str1, crypt($str1, $options1['salt1'])); echo "<br>"; echo sprintf("The Result of DEFAULT function on %s is %s\n", $str1, password_hash($str1, PASSWORD_DEFAULT)); echo "<br>"; echo sprintf("The Result of BCRYPT function on %s is %s\n", $str1, password_hash($str1, PASSWORD_BCRYPT, $options1)); echo "<br>"; ?>
Output:
Penyulitan Kunci Rahsia PHP biasanya menggunakan satu kunci tunggal untuk kedua-dua data penyulitan dan penyahsulitan. Ia juga dikenali sebagai penyulitan simetri. Untuk ini, jika anda menjalankan versi lama Bahasa Pengaturcaraan PHP maka pasang sodium Bahasa Pengaturcaraan PHP melalui PECL.
Pada mulanya, anda memerlukan kunci penyulitan yang sebenarnya dijana hanya dengan menggunakan kod fungsi random_bytes(). Tetapi biasanya, anda perlu melakukannya sekali sahaja dan menyimpannya hanya sebagai pembolehubah persekitaran. Ini adalah kunci yang perlu kita rahsiakan. Jika kunci rahsia diketahui maka yang disulitkan juga akan terjejas.
$secret_key = random_bytes (SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
Untuk menyulitkan nilai yang akan dihantar ke fungsi sodium_crypto_secretbox() dengan kunci/kunci rahsia dan $nonce kami. Kemudian pembolehubah nonce dijana menggunakan fungsi random_bytes() dan ia hanya kerana nonce yang sama/serupa tidak boleh digunakan sekali-kali.
$nonce = random_bytes(SODIUM_CRYPTO_NONCEBYTES); $ciphertext = sodium_crypto_secretbox(‘This is secret key!!!’, $nonce, $secret_key);
Ini akan mewakili masalah kerana kita memerlukan nonce yang akan menyahsulit nilai kemudian/selepas itu. Tetapi NONCE/NONCS tidak mempunyai sebarang kunci untuk disimpan sebagai rahsia supaya kita boleh dengan mudah memasukkannya sebagai $ciphertext dan kemudian base64_encode() adalah nilai yang berlaku sebelum menyimpannya ke pangkalan data sebenar.
$encoded1 = base64_encode($nonce . $ciphertext); Var_dump($encoded1);
Sintaks di atas hanyalah untuk menyulitkan nilai. Untuk menyahkod/menyahsulit nilai yang dikodkan kemudian gunakan sintaks di bawah.
$decoded1 = base64_decode($encoded1);
Panjang pembolehubah atau fungsi nonce akan diekstrak menggunakan fungsi mb_substr() sejurus sebelum menyahsulit nilai.
Ini ialah contoh melaksanakan fungsi random_bytes() untuk memahami penyulitan kunci rahsia. Di sini panjang rentetan rawak akan ditukar dengan bantuan hex binari untuk menjamin bait rawak dalam rentetan.
Code:
<?php $length1 = random_bytes('3'); var_dump(bin2hex($length1)); ?>
Output:
We all know that our data is vulnerable if our secret key is known/compromised. Just consider that a malicious user/attacker got access to the server point which is actually hosting our application/other. In this situation, attacker most of the times gets/discovers out the secret key which should be kept as secret. If it is discovered then our data may be in danger of exposing to the malicious user/attacker.
We can use Cloud KMS service which is actually provided by the Google Cloud Key Management Service. It provided a wide variety of so many useful features. It includes automatic key rotation and also the delayed key destruction capability.
Before sending plaintext to the CLOUD KMS, generate a unique encryption key each and every time when we actually write the data to the database. This key is called DEK (Data Encryption Key) which is actually used in encrypting the data. DEK which is sent to the Google Cloud KMS will be encrypted and then it will return the KEK (key encryption key). At last, KEK will be stored side by side in the actual database point which is next to the encrypted data and then the DEK will be destroyed.
Check out the data encryption and decryption as below:
I hope you learned what is the definition of PHP Encryption and along with the various types of PHP Encryption methods along with the examples by mentioning their brief description. An example is shown here for envelope encryption because it is cloud-based encryption.
Atas ialah kandungan terperinci Penyulitan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!