我对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个字节。根据OpenSSL (https://www.openssl.org/docs/apps/enc.html),$iv和$passphrase ( key to biohazard on PHP (http://php.net/manual/en/function.openssl-encrypt.php))应该是六位数值,md5对此合适吗?passphrase/key可以是多少字节?
错误,换句话说,您如何正确地使用这种加密?//困惑
发布于 2019-11-02 01:00:23
错误,换句话说,您如何正确地使用这种加密?//困惑
如果您正在寻找安全性,请使用defuse/php-加密代替。
如果你想学习,参见解除/php加密如何加密消息内部。
通常,OpenSSL扩展会为您提供太多的选择。在专家的监督下使用它是安全的(不像mcrypt),但它仍然不是很好的开发经验。
https://stackoverflow.com/questions/25529297
复制相似问题