You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 20:43:51