我在openssl_*
中遇到PHP
个问题的一些问题:
出于某种原因,PHP
页面(http://php.net/manual/en/function.openssl-encrypt.php)表示$options
参数可以是其中之一OPENSSL_RAW_DATA
OPENSSL_ZERO_PADDING
当我使用OPENSSL_ZERO_PADDING
加密数据时,它会显示空白字段。
$passphrase = md5( 'lolhaha' );
$iv = md5( 'cheese' );
$enc = openssl_encrypt( "Hello World!", "aes-256-cbc", $passphrase, OPENSSL_ZERO_PADDING, $iv );
echo $enc . "{ENC}";
echo ' --------- ';
$dec = openssl_decrypt( $enc, "aes-256-cbc", $passphrase, OPENSSL_ZERO_PADDING, $iv );
echo $dec . "{DEC}";
但是,如果我使用OPENSSL_RAW_DATA
,它可以正常工作。现在,在该字段中使用false
时,它也有效,但返回base64
是因为我使用旧版本的PHP
,但它仍在使用bool $raw_output
? int $option OPENSSL_ZERO_PADDING
与bool $raw_output false
相同吗?
此外,我收到的消息是IV
对于我使用的密码来说太长了;它显然应该是16个字节。根据{{1}}(https://www.openssl.org/docs/apps/enc.html)OpenSSL
和$iv
($passphrase
根据key
biohazard
PHP
}))应该是十六进制数值,md5
是否合适? passphrase/key
可以有多少字节?
Errr,换句话说,你如何正确使用这种加密? //困惑
答案 0 :(得分:0)
Errr,换句话说,如何正确使用此加密? //困惑
如果您正在寻找安全性,请改用defuse/php-encryption。
如果您想学习,请内部see how defuse/php-encryption encrypts messages。
通常,OpenSSL扩展为您提供too many options。在专家的监督下可以安全使用(与mcrypt不同),但仍然不是很好的开发人员经验。