node.js - 节点加密错误 - 错误的最终块长度
问题描述
crypto
使用我不理解的内容解密响应时出现错误Error: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length
我正在解密一个看起来像这样的响应,'p6\u001e�s�p>l?a%ޟ�=~m�\u0002D�K(�[<\u0007O�6\u001c�a�[sP�=\u00112\u001d�)n�Ⴓ?
为简洁起见,我将其缩短了。最终结果是它应该是一个 JSON 对象
我的代码如下
const crypto = require('crypto');
const secret = "mysecret";
const algorithm = 'aes-128-cbc';
function decryptAES(message) {
const bytes = Buffer.from(message);
const salt = bytes.slice(bytes.length - 8);
const key = crypto.pbkdf2Sync(secret, salt, 10000, 16, 'sha1');
const iv = bytes.slice(bytes.length - 24, bytes.length - 8);
const data = bytes.slice(0, bytes.length - 24);
const decipher = crypto.createDecipheriv(algorithm, key, iv);
let decrpyted = decipher.update(data, 'hex', 'utf8');
decrpyted = Buffer.concat([decrpyted, decipher.final('utf8')])
console.log(decrpyted.toString());
}
谁能指出我可能做错了什么以及错误消息的含义
更新
通过查看另一方的数据是如何加密的,我可以看到他们正在使用PKCS7Padding
. 在我的解密代码中,我没有指定这一点。这可以做到crypto
吗?
解决方案
推荐阅读
- django - 无效的块标签'静态...' Django 3.1
- python - 如何使用 Python 自动将文件从 Google Cloud Storage 上传到 Big Query?
- r - 在 R 中使用 Bootstrapping 获取 Phi 统计的置信区间
- scala - 用镶木地板写入时,时间戳会被修改
- autodesk-forge - Autodesk Forge 数据管理 API 获取顶级文件夹请求现在返回 404 Not Found 今天始终如一,但上周工作
- java - 问题在 Spring Boot 中访问 application.properties 文件中定义的值
- javascript - 无法在反应本机的 web 视图中调用按钮单击功能
- python - 将fill_between与pandadataframe一起使用,需要帮助我得到以下错误ValueError:参数尺寸不兼容
- c# - Unity - 在适用于 Windows 的 Agora 屏幕共享应用中选择屏幕/显示
- azure - 在 Azure 机器学习服务中运行 Keras 时出现类型错误