如何将 mcrypt_crypt 转换为 openssl_crypt?
P粉287345251
P粉287345251 2023-09-09 17:35:02
0
1
365

我想改进某个使用现已过时的“mcrypt”的 WordPress 插件。相反,我想使用 OpenSSL 库来加密提交的数据,但在加密过程中我遇到了问题,即: openssl_encrypt 函数返回与 mcrypt_encrypt 不同的值,我连接到的系统不会返回我的值正确的数据,并且其所有者无法向我发送我上传到其中的内容的日志:(

我已经搜索了整个互联网,但还没有找到解决方案。我怀疑问题出在填充上,但我找不到解决方案。你能帮忙吗?

下面是我的 PHP 对象 $password、$salt 和 $iv 的内部明显发生了变化

class EncryptDebug{
private $algo = 'sha1';
private $password = 'ab4232goodcf423484422c90c3e4aa7c';
private $salt = 'ascastas54490a31';
private $iv = '8947da32awl55kwj'
private $lenght = 16;
private function generate_key(){
    return hash_pbkdf2( $this->algo , $this->password , $this->salt, 100, $this->lenght, true );
}
public function encryptSSL($plaintext){
    $key = $this->generate_key();
    $ciphertext = base64_encode(openssl_encrypt($plaintext, 'AES-128-CBC', $key,  OPENSSL_ZERO_PADDING, $this->iv));
    
    return str_replace('+', '%2B', $ciphertext);

}
public function encryptMCRYPT($plaintext){
    $key = $this->generate_key();
    $ciphertext = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaintext, MCRYPT_MODE_CBC, $this->iv));
    
    return str_replace('+', '%2B', $ciphertext);

}
}

忘记提及:OPENSSL_ZERO_PADDING 返回错误。使用 OPENSSL_RAW_DATA 我可以获得与 mcrypt_encrypt 类似的结果,但结局不同,例如:

OpenSSL:rPzVvF7gaPMA4ADAjHUW8Wy1ThTJG%2BVPdcz5iKAkAwrDTTFTcOpWgWOCh9l9JFZ8WcNzMJ868026TkUxcYJMrQ==

MCRYPT:rPzVvF7gaPMA4ADAjHUW8Wy1ThTJG%2BVPdcz5iKAkAwrDTTFTcOpWgWOCh9l9JFZ8UGVfF091Q9bY61mTRg%2BBSg==

P粉287345251
P粉287345251

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!