我有一些遗留的python脚本,用于单向加密数据库存储的密码
import base64, hashlib
def encrypt(passw):
secret = "SECRET_KEY_HERE"
passw = secret + passw
passw = passw.encode('utf-8')
m = hashlib.sha256()
m.update(passw)
encoded = base64.b64encode(m.digest()).decode('utf-8')
return (encoded)
我设法为我们正在使用的现有第三方软件包整合了一个c#版本
private static string Encrypt(string clearText)
{
SHA256 sHA256 = SHA256.Create();
byte[] sourceArray = sHA256.ComputeHash(Encoding.UTF8.GetBytes(EncryptionKey + clearText));
return Convert.ToBase64String(sourceArray);
}
这两个都返回相同的结果。我正在尝试使用Next组合一个Web前端,并在注册/登录页面中添加了一个加密函数
const crypto = require('crypto');
export const encrypt = (password: string) :string => {
const key = process.env.PASS_KEY;
return crypto.createHash('sha256').update(key + password).digest('base64')
}
这向其它两个函数返回不同的结果。
我已经检查了所有通常的来源,所有我发现的是,我已经放在一起应该工作正常。
有谁能解释一下为什么这不起作用
更新:
为了增加我的困惑,我将js函数添加到codesandbox的react表单中,它返回正确的结果。
该函数当前仅通过nextauth authorize函数调用,以验证用户的登录,如下所示
const confirmPasswordHash = (plainPassword: string , hashedPassword: string) => {
const res = plainPassword && hashedPassword.localeCompare(encrypt(plainPassword))
return res === 0 ? true:false
}
1条答案
按热度按时间ctehm74n1#
Jonathan Ciapetti为我指出了解决这个问题的正确方向。问题确实存在于process.env调用中。
使用的键包括一个美元符号,它反过来又截断了传入的字符串的一部分。我通过转义键中的美元符号解决了这个问题,现在一切都按预期工作。