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); }
使用這兩個函數來加密和解密數據,只有我的加密有效。
// Encrypting foo echo encrypt("foo", "hfgdhgdfhgfd"); // Response DyUxPwraJyk= // Decrypting DyUxPwraJyk= echo decrypt("DyUxPwraJyk=", "hfgdhgdfhgfd"); // Doesn't respond with anything.
我已經嘗試了一切,甚至多次重寫函數,但似乎沒有任何效果。
P粉8951872662024-01-11 15:59:17
$iv
選項有“初始化向量”,它的作用有點像鹽:它為每個訊息提供不同的初始狀態,以便保證對同一訊息加密兩次不同的結果。
就像鹽一樣,在加密訊息時應隨機選擇 IV,然後與訊息一起傳輸或存儲,以便在解密訊息時可以提供相同的值。
您可能希望您的加密
函數將$iv
附加到輸出,並解密
將它們分離出來。
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