【问题标题】:Encrypting string with \t \r \n nodejs使用 \t \r \n nodejs 加密字符串
【发布时间】:2021-06-09 14:02:01
【问题描述】:
module.exports.crypt = async ({ secretKey, ivKey }, data) => {

 let encryptedData = {};
 for (key in data) {
   const cipher = crypto.createCipheriv('aes-256-cbc', secretKey, ivKey);
   encrypted = cipher.update(data[key]);
   encrypted = Buffer.concat([encrypted, cipher.final()]);
   encryptedData[key] = encrypted.toString('base64');
 }
  return encryptedData;
}

此代码 sn-p 适用于普通加密,但当我尝试加密 'test\testemployee' 字符 '\t' 被省略(与 "\n" "\r" 相同)。有没有办法避免这种情况?

【问题讨论】:

  • 我强烈怀疑您在其他代码中的某个地方正在剥离这些字符,无论是在加密之前还是在解密之后。在加密之前打印出data[key],然后查看你的解密代码并在解密后立即检查字符串(在它返回给其他可能修改它的东西之前)。您的错误不在此代码之外。

标签: node.js cryptography aes


【解决方案1】:

CBC 模式下的 AES 不关心您加密的内容:它只是加密您提供的字节(在大多数实现中将其填充到正确的大小之后)。

data[key] 是否包含正确的字符?如果是这样,那么您需要明确编码为例如调用 update 之前的 UTF-8。否则,您当然需要确保为 data[key] 分配了正确的值。

请注意,使用let message = data[key] 后跟encrypted = cipher.update(message) 会在调试器中显示消息的内容;不要着急!

【讨论】:

  • 谢谢兄弟! data[key] 是省略特殊字符。我正在使用 {username: "test\test", password: "testpw"} 迭代一个 json 对象
猜你喜欢
  • 2014-03-18
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
  • 2019-12-07
  • 2012-04-27
  • 1970-01-01
相关资源
最近更新 更多