笔记 ------ egg
需求:postgressql的密码进行解密连接
目录结构如下
1.选择用node自带的crypto进行加密解密操作(ps:不用md5的原因是其是不可逆加密,无法进行解密操作)。
我将加密与解密方法放入了config.js中
(1)加密
// 加密 key:加密密钥,如abcdefgh12345678 pas:密码
encrypt(password) {
// iv:初始向量 const config = this.app.config;
const iv = Buffer.from(config.key, 'utf8');
// aes-128-cbc算法要求密钥须是16位
const cipher = crypto.createCipheriv('aes-128-cbc', config.key, iv);
let enc = cipher.update(password, 'utf8', 'hex');
enc += cipher.final('hex');
// 加密后的值
return enc;
console.log(enc);
}
(2)解密
// 解密 crypted:加密后的串
decrypt(crypted) {
// iv:初始向量
const config = this.app.config;
const iv = Buffer.from(config.key, 'utf8');
const decipter = crypto.createDecipheriv('aes-128-cbc', config.key, iv);
let dec = decipter.update(crypted, 'hex', 'utf8');
dec += decipter.final('utf8');
// 解密后的值
return dec;
}
注意:
①其中“‘aes-128-cbc’”为加密和解密的算法,二者必须保持一致
②iv为初始向量,加解密也需保持一致,密钥key也需保持一致
③该算法要求密钥和iv都是16字节;
此部分可参考文章:https://www.cnblogs.com/jaxu/p/11649131.html
2.修改密码
疑问:
1.app.js入口文件中,对于configWillLoad函数,官网说的是:
此时 config 文件已经被读取并合并,但是还并未生效, 这是应用层修改配置的最后时机
但是发现在这里解密并无用,启动时会报错说postgres密码不对,官网给的更改密码例子是mysql,本项目中使用的是sequelize,猜测在合并config后到configWillLoad生命周期函数之前,就会初始化数据库。
2.config.local.js会进入两次,config也合并了两次。
找了很久没有找到以上相关问题的原因或者解决办法,知道以上疑问的小伙伴劳烦来告诉我一下哦,感谢☆⌒(*^-゜)v THX!!!
ps:对于密码进行加密时一定要注意不能输错密码,小心再小心!!!
(题外话:别问我为啥这样提醒,天知道我因为输错密码,导致解密成错误密码,后续一直启动不成功时花了多长时间来解决(≧0≦)!!!!!,最后不小心瞥了一下解密后的密码,整个人都不好了,太坑自己了(⊙﹏⊙),但感谢自己的一瞥!!!于是一怒之下写了这篇笔记给自己提醒!)