Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用OpenSSL的PHP加密_Php_Encryption - Fatal编程技术网

使用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不需要保密。有关如何工作的帮助,请参阅此链接