Maison > Questions et réponses > le corps du texte
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); }
En utilisant ces deux fonctions pour crypter et décrypter les données, seul mon cryptage fonctionne.
// Encrypting foo echo encrypt("foo", "hfgdhgdfhgfd"); // Response DyUxPwraJyk= // Decrypting DyUxPwraJyk= echo decrypt("DyUxPwraJyk=", "hfgdhgdfhgfd"); // Doesn't respond with anything.
J'ai tout essayé, même réécrire la fonction plusieurs fois, mais rien ne semble fonctionner.
P粉8951872662024-01-11 15:59:17
$iv
Les options ont un "Vecteur d'initialisation", qui agit un peu comme un sel : il fournit un état initial différent pour chaque message, de manière à garantir des résultats différents pour chiffrer deux fois le même message.
Tout comme le sel, le IV doit être sélectionné au hasard lors du cryptage du message, puis transmis ou stocké avec le message afin que la même valeur puisse être fournie lors du déchiffrement du message.
Vous souhaiterez peut-être que votre fonction encrypt
ajoute 加密
函数将$iv
附加到输出,并解密
à la sortie et decrypt
pour les séparer.
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