正确的openssl_encrypt和openssl_decrypt

时间:2014-08-27 14:05:30

标签: php encryption openssl

我在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_outputint $option OPENSSL_ZERO_PADDINGbool $raw_output false相同吗?

此外,我收到的消息是IV对于我使用的密码来说太长了;它显然应该是16个字节。根据{{​​1}}(https://www.openssl.org/docs/apps/enc.htmlOpenSSL$iv$passphrase根据key biohazard PHP }))应该是十六进制数值,md5是否合适? passphrase/key可以有多少字节?

Errr,换句话说,你如何正确使用这种加密? //困惑

1 个答案:

答案 0 :(得分:0)

  

Errr,换句话说,如何正确使用此加密? //困惑

如果您正在寻找安全性,请改用defuse/php-encryption

如果您想学习,请内部see how defuse/php-encryption encrypts messages

通常,OpenSSL扩展为您提供too many options。在专家的监督下可以安全使用(与mcrypt不同),但仍然不是很好的开发人员经验。