我正在为有两个函数的环境变量构建一个加密/解密模块
encrypted.env
我遇到了一个问题,.env的第一行是解密后的未知字符。
.env原始内容
STAGE="DEVELOPMENT"
USERNAME="Greggo"
PASSWORD="myPassw0rd?1234"encrypted.env:
PEGeGD40pJoLBN2cQvFgPm/KrWxMakRkKkhbUlzQdsNF8zrmr0w5dUsEVINRfXPPM23W8No8HF5uCzqRCMG98g5MHDZkHpXE1s4/cevGTv0=解密的.env:
�~#�A��YHQ��//NT"
USERNAME="Greggo"
PASSWORD="myPassw0rd?1234"encrypt.js
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
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);
});
});发布于 2021-01-28 20:28:37
您的加密器有一个由randomFill生成的随机IV,但是您似乎把它扔掉了。您的解密代码创建了一个填充了零的IV。你的静脉输液应该是一样的。通常情况下,您可以将随机生成的IV预先添加到加密器中的密文中,然后在解密器中读取。但无论如何,它们必须是一样的。
https://stackoverflow.com/questions/65944612
复制相似问题