node.js - NodeJS解密数据损坏原始数据
问题描述
我使用 AES-266-CBC 加密数据:
const iv = crypto.randomBytes(8).toString('hex');
const encrypt = (text: string): string => {
log('encrypt');
const cipher = crypto.createCipheriv('aes-256-cbc', ENCRYPTION_KEY, iv);
let encrypted = cipher.update(text, 'utf8', 'hex');
encrypted += cipher.final('hex');
return encrypted;
};
const decrypt = (text: string): string => {
log('decrypt');
const decipher = crypto.createDecipheriv('aes-256-cbc', ENCRYPTION_KEY, iv);
let decrypted = decipher.update(text, 'hex', 'utf8');
decrypted += decipher.final('utf8');
return decrypted;
};
一切正常,这意味着如果我使用它:
const data = JSON.stringify({
user: 'MHF',
info: {
age: 23,
family: 'HF'
}
});
const encrypted = encrypt(data);
console.log('encrypted: %s', encrypted);
const decrypted = decrypt(encrypted);
console.log('decrypted: %s', decrypted);
问题是,当我通过这样的 post 请求 http 发送我的加密字符串时:
POST {{baseUrl}}/v1/user-register
Content-Type: application/json
Content-Encrypted: AES
{"payLoad": "3f1d1584b0e1976ccea311b5fbe0b2aee1034198a582a3b8bcc773c175e91bb0ceda6b9fb88aff11a892fa7adb83d432"}
我有一个由一些不正确的字符解密的数据,例如:
'r!!(h\x7F!o#L\x19\x10~\x7F"jnfo":{"age":23,"family":"HF"} }'
为什么当我通过加密数据进行发布请求时,我会得到这个结果?
这是什么:'r!!(h\x7F!o#L\x19\x10~\x7F"j'?
解决方案
感谢@Topaco 和@Michael Fehr
这是我关于生成和使用 IV 的大错误
推荐阅读
- swift - 如何解决此问题:“UIScrollView”类型的值没有成员文本
- c++ - 使用 cmake 构建比特币
- proxy - 如何判断 Python 中的 GET 请求是使用 https 还是 http 代理?
- html - 以'/'和'~/'开头的路径有什么区别
- c# - 如何使用 .net 核心在 electron.net 中使用嵌入式 firebird 数据库
- java - 我应该对 Base64 或 Java 的默认 ISO-6559-1 使用 ASCII 编码吗?
- java - 在 try-catch 块中,“finally”是否会覆盖异常块中的“return”?
- python - 用于在 Python 中提取脚本标签的正则表达式
- python - 如何在抽象模型的 ManyToMany 字段中设置related_name?
- sql - 更改后如何知道列的先前长度