首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从base64到utf-8解密时返回未知字符的密码

从base64到utf-8解密时返回未知字符的密码
EN

Stack Overflow用户
提问于 2021-01-28 20:18:50
回答 1查看 217关注 0票数 0

我正在为有两个函数的环境变量构建一个加密/解密模块

encrypted.env

  • decrypt
  1. 加密.env的内容并将其写入encrypted.env的内容并写入.env

我遇到了一个问题,.env的第一行是解密后的未知字符。

.env原始内容

代码语言:javascript
运行
复制
STAGE="DEVELOPMENT"
USERNAME="Greggo"
PASSWORD="myPassw0rd?1234"

encrypted.env:

代码语言:javascript
运行
复制
PEGeGD40pJoLBN2cQvFgPm/KrWxMakRkKkhbUlzQdsNF8zrmr0w5dUsEVINRfXPPM23W8No8HF5uCzqRCMG98g5MHDZkHpXE1s4/cevGTv0=

解密的.env:

代码语言:javascript
运行
复制
�~#�A��YHQ��//NT"
USERNAME="Greggo"
PASSWORD="myPassw0rd?1234"

encrypt.js

代码语言:javascript
运行
复制
fs.readFile('./.env', 'utf-8', (err, data) => {
  if (err) {
    throw err;
  }
  console.log(data);
  crypto.scrypt('glfgmkjldpg90d9gd88k3kfs;fsdl;f99sfFKkdl;dlda', 'salt', 24, (err, key) => {
    if (err) {
      throw err;
    }
    crypto.randomFill(new Uint8Array(16), (err, iv) => {
      if (err) {
        throw err;
      }
      const cipher = crypto.createCipheriv('aes-192-cbc', key, iv);

      let encrypted = cipher.update(data, 'utf-8', 'base64');
      encrypted += cipher.final('base64');
      console.log(encrypted);

      fs.writeFile('./encrypted.env', encrypted, (err, data) => {
        if (err) {
          throw err;
        }
        console.log(data);
      });
    });
  })
});

decrypt.js

代码语言:javascript
运行
复制
fs.readFile('./encrypted.env', 'utf-8', (err, encryptedData) => {
  if (err) {
    throw err;
  }
  console.log(encryptedData);
  const key = crypto.scryptSync('glfgmkjldpg90d9gd88k3kfs;fsdl;f99sfFKkdl;dlda', 'salt', SALT_ROUNDS);
  const iv = Buffer.alloc(16, 0);

  const decipher = crypto.createDecipheriv('aes-192-cbc', key, iv);

  let decrypted = decipher.update(encryptedData, 'base64', 'utf-8');
  decrypted += decipher.final('utf-8');
  console.log(decrypted);

  fs.writeFile('./.env', decrypted, (err, decryptedData) => {
    if (err) {
      throw err;
    }
    console.log(decryptedData);
  });
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-28 20:28:37

您的加密器有一个由randomFill生成的随机IV,但是您似乎把它扔掉了。您的解密代码创建了一个填充了零的IV。你的静脉输液应该是一样的。通常情况下,您可以将随机生成的IV预先添加到加密器中的密文中,然后在解密器中读取。但无论如何,它们必须是一样的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65944612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档