使用OpenSSL的PHP加密
我一直在尝试编写两个函数来加密和解密我的数据,因为我存储了一些我不想以纯文本形式进入数据库的信息。加密的功能运行良好。但我不知道为什么解密不能恢复纯文本 我做错什么了吗使用OpenSSL的PHP加密,php,encryption,Php,Encryption,我一直在尝试编写两个函数来加密和解密我的数据,因为我存储了一些我不想以纯文本形式进入数据库的信息。加密的功能运行良好。但我不知道为什么解密不能恢复纯文本 我做错什么了吗 <?php $string = "This is my string!"; $encryption_key = "DVF0!LoQs2bPyTvSF0epXPFStbIn!057"; $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length(AES_256_CB
<?php
$string = "This is my string!";
$encryption_key = "DVF0!LoQs2bPyTvSF0epXPFStbIn!057";
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length(AES_256_CBC));
function encryptString($encryption_key, $iv, $string) {
define('AES_256_CBC', 'aes-256-cbc');
$encrypted = openssl_encrypt($string, AES_256_CBC, $encryption_key, 0, $iv);
return $encrypted;
}
function decryptString($encryption_key, $iv, $encrypted) {
define('AES_256_CBC', 'aes-256-cbc');
$encrypted = $encrypted . ':' . $iv;
$parts = explode(':', $encrypted);
$decrypted = openssl_decrypt($parts[0], AES_256_CBC, $encryption_key, 0, $parts[1]);
return $decrypted;
}
$encryptstring = encryptString($encryption_key, $iv, $string);
$decryptstring = decryptString($encryption_key, $iv, $encryptstring);
?>
原件:
加密密钥:
加密函数:
解密的func:
您的加密密钥会随着使用openssl\u random\u pseudo\u字节的每次函数调用而更改
将密钥设置为静态,例如$encryption\u key=“XXXX”
或全局变量,只调用一次
不要忘了将其应用于$iv。每次使用openssl\u random\u pseudo\u bytes调用函数时,加密密钥都会发生变化
将密钥设置为静态,例如$encryption\u key=“XXXX”
或全局变量,只调用一次
不要忘了将其应用于$iv。您使用的是什么PHP版本?难道你没有一个严格的标准:只有变量应该通过引用通知来分配吗?除了上面的注释,你可以从&encryptString
和&decryptString
中去掉符号。IV是16字节吗?2.添加加密数据。3.既然解密不起作用,为什么您认为加密可以正常工作?您使用的是什么PHP版本?难道你没有一个严格的标准:只有变量应该通过引用通知来分配吗?除了上面的注释,你可以从&encryptString
和&decryptString
中去掉符号。IV是16字节吗?2.添加加密数据。3.既然解密不起作用,为什么您认为加密可以正常工作?我已经将我的密钥设置为静态,我不知道我需要在$iv中更改什么$iv也是一个openssl_random_pseudo_bytes
,因此它与encrypt和decrypt的值不同。@Liam iv需要在加密和解密时相同,一种常见的解决方案是在加密数据前面加上IV,解密时将数据拆分为IV和加密数据。IV不需要保密。有关如何工作的帮助,请参阅此链接。我已将我的密钥设置为静态,我看不出需要在$IV中更改什么$IV也是一个openssl\u random\u pseudo\u bytes
,因此它与encrypt和decrypt的值不同。@Liam IV需要与encrypt和decrypt的值相同,一种常见的解决方案是在加密数据前面加上IV,解密时将数据拆分为IV和加密数据。IV不需要保密。有关如何工作的帮助,请参阅此链接