【问题标题】:NodeJS Decrypt Data Corrupt Original DataNodeJS解密数据损坏原始数据
【发布时间】:2020-09-25 15:28:00
【问题描述】:

我使用 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'?

【问题讨论】:

  • 加解密需要相同的IV。看起来您正在使用不同的 IV。通常在加密期间会生成一个随机 IV,并与密文(通常是串联的)一起发送给接收者。
  • @Topaco 是的,我向两个函数发送相同的 IV: const iv = crypto.randomBytes(8).toString('hex');
  • @mh f: 很抱歉,您使用了相同的 函数 生成 random iv 来加密和解密,所以在解密端这将是一个 不同 iv,而不是在加密方面使用的那个 - 这就是 Topaco 提出的观点。
  • @Topaco @Michael Fehr 你说得对,这是我的大错。还是谢谢你们俩

标签: node.js cryptography aes


【解决方案1】:

感谢@Topaco 和@Michael Fehr
生成和使用 IV 是我犯的一个大错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多