javascript - 为什么我的函数返回 unicode 替换字符
问题描述
我正在尝试为密码添加加密,并希望存储哈希并在注册/登录时完成加密/解密,从 utf8 到十六进制的加密很好,但是当我尝试解密时,我得到了一堆看起来像这样的奇怪字母:
"\ufffd'\rF\ufffd\ufffd\¡\ufffd6>\ufffd\ufffd#B,0\u0005\u0007\ufffd?\ufffd;\ufffd\u0018\u001e\"oؕ"
我一直在试图弄清楚它是如何使用错误的编码数据的,因为我在正确的位置有 hex 和 utf8 标签;我也一直在尝试查看其他帖子,但我担心它们会超出我的理解,因为它们应该如何帮助我。
这是我从中导出的第一个文件
var crypto = require("crypto");
var secretkey = "twinkies";
var key = {
encrypt: function(pass){
var mykey = crypto.createCipher('aes-128-cbc', secretkey);
var finpass = mykey.update(pass, 'utf8', 'hex');
finpass += mykey.final('hex');
return finpass;
},
decrypt: function(pass){
var mykey = crypto.createCipher('aes-128-cbc', secretkey);
var finpass = mykey.update(pass, 'hex', 'utf8');
finpass += mykey.final('utf8');
return finpass;
}
};
这是使用方法的第二个文件
app.post("/api/users/create", function(req, res) {
console.log(req.body.pword);
var newpass = key.encrypt(req.body.pword);
var oldpass = key.decrypt(newpass);
var enddata = {
Ciphored_password : newpass,
Deciphored_password : oldpass
}
console.log(res.json(enddata));
我使用邮递员来测试我的 localhost api,并输入“bigthonks”作为密码,当它控制台记录 enddata 时 Ciphored_password 看起来像:
982cb6d27f65fbb642c8c7b710e6c349
和解密密码:
"\ufffd'\rF\ufffd\ufffd\¡\ufffd6>\ufffd\ufffd#B,0\u0005\u0007\ufffd?\ufffd;\ufffd\u0018\u001e\"oؕ"
解决方案
原来我是个白痴......我错过了修复错误的第一步,它正在查看方法名,
var crypto = require("crypto");
var secretkey = "twinkies";
var key = {
encrypt: function(pass){
var mykey = crypto.createCipher('aes-128-cbc', secretkey);
var finpass = mykey.update(pass, 'utf8', 'hex');
finpass += mykey.final('hex');
return finpass;
},
decrypt: function(pass){
var mykey = crypto.createCipher('aes-128-cbc', secretkey);
var finpass = mykey.update(pass, 'hex', 'utf8');
finpass += mykey.final('utf8');
return finpass;
}
};
在我的解密方法上,当我为它生成解密器时,我使用 createCipher() 方法而不是 createDecipher() 方法,这对我来说真的很重要。
我通过将解密方法更改为此轻松修复它:
decrypt: function(pass){
var mykey = crypto.createDecipher('aes-128-cbc', secretkey);
var finpass = mykey.update(pass, 'hex', 'utf8');
finpass += mykey.final('utf8');
return finpass;
}
现在它可以工作了。
推荐阅读
- java - Android 中的 Apache Velocity(“无法找到资源”)
- javascript - 更改电子商务购物车的数量时更改产品价格
- python - 多变量 LSTM 输入形状
- sql - 使用 to_char 的 Postgresql 小数点
- ruby - 工作中断期间的 Sidekiq/Redis 扩展(与 SQS 相比)
- email - 将电子邮件从非拥有域重定向到拥有域
- mysql - 角垫表水平动态列
- php - 在 Woocommerce 属性和自定义字段列表中添加 h4
- marklogic - 搜索具有未过滤选项的文档,其值以包含特殊字符的字符串开头?
- javascript - Slick Slider - 有没有办法在滑块处于活动状态时添加和删除类?