Php 从mcrypt_解密到openssl_解密
我有一个问题,我想用open_ssl decrypt替换对mcrypt的函数调用。但产出是混合的: 这是mcrypt实现(非常有效): 我把它翻译成:Php 从mcrypt_解密到openssl_解密,php,openssl,mcrypt,php-openssl,Php,Openssl,Mcrypt,Php Openssl,我有一个问题,我想用open_ssl decrypt替换对mcrypt的函数调用。但产出是混合的: 这是mcrypt实现(非常有效): 我把它翻译成: var_dump( trim( openssl_decrypt( $encrypted, 'AES-256-CBC', substr(sha1($this->secretKey), 0,
var_dump(
trim(
openssl_decrypt(
$encrypted,
'AES-256-CBC',
substr(sha1($this->secretKey), 0, 32),
OPENSSL_ZERO_PADDING, $iv)
),"\0..\32");
,
但它会导致一个错误:
openssl_decrypt():传递的IV长度为24字节,比
所选密码应为16,截断
和混合输出:
'm% xlj
j> | lgSke:“2017-05-19T05:48:37-07:00”,“收据”:
正在混合的第一个键值对
有任何建议或任何我可能错过的选择吗
谢谢!
$data
可以如描述所示为raw或base64。如果未设置$option
(即,如果此参数中传递了0值),则数据将假定为base64编码。如果设置了参数OPENSSL_raw__data
,则将其理解为行数据
$iv
与$password
一样,是一个字节字符串。其长度取决于所使用的算法。生成$iv
的最佳方法可能是:
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('your algorithm'));
// for example you algorithm = 'AES-256-CTR'
有关更多信息:
$data
可以按照描述中的原始或base64。如果未设置$option
(即,如果在该参数中传递了0值),则数据将假定为base64编码。如果设置了参数OPENSSL\u raw\u data
,则将其理解为行数据
$iv
与$password
一样,是一个字节字符串。其长度取决于所使用的算法。生成$iv
的最佳方法可能是:
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('your algorithm'));
// for example you algorithm = 'AES-256-CTR'
有关更多信息:另请参见,提供完整的示例数据集(明文、密钥、iv、密文)始终是一个好主意检查任何实现。这可能很好,因为我们可以看到加密功能。看到解密的输出,似乎iv的值是错误的。另请参见,提供完整的示例数据集(明文、密钥、iv、密文)始终是一个好主意检查任何实现。这可能很好,因为我们也可以看到加密函数。看到解密的输出,看起来iv的值是错误的。