Python与C#哈希结果一致,Next.js中JS哈希结果不符问题排查
问题:Next.js中密码加密结果与Python/C#版本不一致
背景
我有一段用于数据库密码单向加密的遗留Python脚本,同时为第三方包编写了对应的C#版本,这两个版本的加密结果完全一致。但在Next.js搭建的Web前端中实现的同逻辑加密函数,返回结果却和前两者不同。我查阅了常规资料,按资料所述代码逻辑应该没问题,想知道原因所在。
遗留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.js中的JavaScript加密实现
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 }
内容的提问来源于stack exchange,提问作者Magus
相关产品推荐
相关产品推荐

