您的位置:首页 > 娱乐 > 明星 > 网页设计基础视频_哈尔滨cms网站建设_淘宝关键词排名查询_seo搜索引擎排名优化

网页设计基础视频_哈尔滨cms网站建设_淘宝关键词排名查询_seo搜索引擎排名优化

2024/12/27 10:09:48 来源:https://blog.csdn.net/Anlige/article/details/142896898  浏览:    关键词:网页设计基础视频_哈尔滨cms网站建设_淘宝关键词排名查询_seo搜索引擎排名优化
网页设计基础视频_哈尔滨cms网站建设_淘宝关键词排名查询_seo搜索引擎排名优化

使用PHP和nodejs进行通讯时候遇到双方加解密结果不一致的问题。
注意到crypto.createCipher(algorithm, password[, options])方法有如下的提示。

The implementation of crypto.createCipher() derives keys using the OpenSSL 
function EVP_BytesToKey with the digest algorithm set to MD5, one iteration, and no salt. 

createCipher方法只接受key,不接受iv参数,iv参数是使用opensslEVP_BytesToKey方法对key进行扩展得来的,salt为空,hash算法为MD5
可以使用新的createCipheriv方法代替,但原来的NodeJs代码不能修改,只能从php方面入手修改。

简易实现-使用php对key进行扩展,再进行加解密。

function EVP_BytesToKey($salt, $password) {$bytes = '';$last = '';while(strlen($bytes) < 48) {$last = hash('md5', $last . $password . $salt, true);$bytes.= $last;}return $bytes;}
//从扩展结果中分离真正用于通讯的key和iv
$key = '12345678901234561234567890123456';
$devd = EVP_BytesToKey('', $key);
$key = substr($devd, 0, 32);
$iv = substr($devd, 32, 16);@openssl_encrypt('test-data', "aes-256-cbc", $key,  1, $iv);

nodejs直接使用key进行加解密

const key = '12345678901234561234567890123456';
crypto.createCipher("aes-256-cbc", key)

EVP_BytesToKey的完整实现

/*** @param string $password* @param int $nkey 需要生成的密钥长度* @param int $niv 需要生成的iv长度* @param string $hash HASH算法,默认MD5* @param string $salt salt。默认为空* @param int $round HASH运行轮数* @return array*/
function EVP_BytesToKey(string $password, int $nkey = 32, int $niv = 16, string $hash = 'md5', string $salt = '', int $round = 1): array
{$bytes = '';$last = '';$total = $nkey + $niv;while (strlen($bytes) < $total) {$last = hash($hash, $last . $password . $salt, true);for ($i = 1; $i < $round; $i++) {$last = hash($hash, $last, true);}$bytes .= $last;}return ['key' => substr($bytes, 0, $nkey),'iv' => substr($bytes, $nkey, $niv),];}

更多语言实现

https://github.com/sometiny/evp_bytestokey
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com