Php 从mcrypt_解密到openssl_解密

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,

我有一个问题,我想用open_ssl decrypt替换对mcrypt的函数调用。但产出是混合的:

这是mcrypt实现(非常有效):

我把它翻译成:

        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的值是错误的。