我有两个字段用户名和密码,当我注册用户时,我正在用AES加密用户名并存储到数据库中,现在我无法登录,因为纯文本与加密数据不匹配。
如何解决此问题?
附注:-1)我正在使用Crypto.js库2)登录时,我不能再次加密用户名,因为它提供了不同的加密数据。
发布于 2021-05-04 03:03:58
您尝试实现的内容通常是通过散列完成的。用户名的散列函数将始终返回相同的散列值。
如果存在加密用户名而不是散列的特定原因(虽然您还没有解释),那么您将需要对其进行解密,以便比较这些值,或者使用确定性的加密模式,并且不涉及随机初始化向量。详情请参见this question and its answers。
发布于 2021-05-03 16:17:20
在您的登录逻辑中,您应该使用相同的AES加密来加密用户在登录时输入的用户名。如果用户名确实在您的数据库中,使用该加密的用户名应该能够在您的数据库中查询/定位用户名。
以下是有关加密和解密工作原理的参考(从HERE复制):
var CryptoJS = require("crypto-js");
// Encrypt
var ciphertext = CryptoJS.AES.encrypt('my message', 'secret key 123').toString();
// Decrypt
var bytes = CryptoJS.AES.decrypt(ciphertext, 'secret key 123');
var originalText = bytes.toString(CryptoJS.enc.Utf8);
console.log(originalText); // 'my message'https://stackoverflow.com/questions/67364189
复制相似问题