首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从MCRYPT_MODE_ECB到AES-256-ECB的切换

从MCRYPT_MODE_ECB到AES-256-ECB的切换
EN

Stack Overflow用户
提问于 2018-02-12 17:20:48
回答 1查看 2.6K关注 0票数 0

我正在重写代码,以便与PHP 7.2兼容。旧的代码是

代码语言:javascript
运行
复制
public function encryptPasswordOld($password, $salt)
{
    $key = md5($salt);
    $result = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $password, MCRYPT_MODE_ECB);
    return base64_encode($result);
}

根据我的研究,新的代码应该是这样的

代码语言:javascript
运行
复制
public function encryptPasswordNew($password, $salt)
{
    $method = 'AES-256-ECB';
    $ivSize = openssl_cipher_iv_length($method);
    $iv = openssl_random_pseudo_bytes($ivSize);
    $key = md5($salt);
    $result = openssl_encrypt($password, $method, $key, OPENSSL_RAW_DATA, $iv);
    return base64_encode($result);
}

但我尝试了所有openssl_encrypt选项的组合:OPENSSL_RAW_DATAOPENSSL_RAW_DATA | OPENSSL_ZERO_PADDINGOPENSSL_ZERO_PADDING0,但在旧方法返回时仍然得到不同的结果

EN

回答 1

Stack Overflow用户

发布于 2020-11-02 16:51:39

请尝试在加密前对值使用pkcs5padding。即

记住,数据块大小应该是基于8字节的,例如8/16/24等等。

代码语言:javascript
运行
复制
function pkcs5_pad($text, $blocksize)
{
    $pad = $blocksize - (strlen($text) % $blocksize);
    return $text . str_repeat(chr(0), $pad);
}

加密选项应为OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING,即

代码语言:javascript
运行
复制
openssl_encrypt(pkcs5_pad($value, 16), 'aes-256-ecb', $aes_key, 3, '')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48742984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档