Rumah > Soal Jawab > teks badan
rreeee
Menggunakan dua fungsi ini untuk menyulitkan dan menyahsulit data, hanya penyulitan saya yang berfungsi.
function encrypt($string, $key) { $method = "BF-CBC"; $iv = random_bytes(openssl_cipher_iv_length($method)); $options = 0; $key = hash("sha256", $key); return openssl_encrypt($string, $method, $key, $options, $iv); } function decrypt($string, $key) { $method = "BF-CBC"; $iv = random_bytes(openssl_cipher_iv_length($method)); $options = 0; $key = hash("sha256", $key); return openssl_decrypt($string, $method, $key, $options, $iv); }
Saya telah mencuba segala-galanya, walaupun menulis semula fungsi beberapa kali, tetapi nampaknya tiada apa-apa yang berkesan.
P粉8951872662024-01-11 15:59:17
$iv
Pilihan mempunyai "Vektor Permulaan", yang bertindak sedikit seperti garam: ia memberikan keadaan awal yang berbeza untuk setiap mesej, untuk menjamin hasil yang berbeza untuk menyulitkan mesej yang sama dua kali.
Sama seperti garam, IV harus dipilih secara rawak apabila menyulitkan mesej dan kemudian dihantar atau disimpan dengan mesej supaya nilai yang sama boleh diberikan semasa menyahsulit mesej.
Anda mungkin mahu fungsi 加密
函数将$iv
附加到输出,并解密
pada output dan nyahsulit
untuk memisahkannya.
function encrypt($string, $key) { $method = "BF-CBC"; $iv = random_bytes(openssl_cipher_iv_length($method)); $options = 0; $key = hash("sha256", $key); return base64_encode($iv) . '|' . openssl_encrypt($string, $method, $key, $options, $iv); } function decrypt($encryptedString, $key) { $method = "BF-CBC"; [ $iv, $ciphertext ] = explode('|', $encryptedString, 2); $iv = base64_decode($iv); $options = 0; $key = hash("sha256", $key); return openssl_decrypt($ciphertext, $method, $key, $options, $iv); } echo encrypt("foo", "hfgdhgdfhgfd"); # fJTTArVw8e8=|zJOHacxbs1Q= echo decrypt("fJTTArVw8e8=|zJOHacxbs1Q=", "hfgdhgdfhgfd"); # foo