前端用 CryptoJS 做 SHA256 摘要,为什么每次结果都不一样?

公孙美蓝 阅读 5

我在登录页用 CryptoJS 对用户密码做 SHA256 摘要再传给后端,但发现每次输入相同密码,生成的哈希值都不一样。是不是我用法有问题?

我直接这样调的:CryptoJS.SHA256(password),查了文档好像没错啊,但结果就是不稳定。

import CryptoJS from 'crypto-js';

function hashPassword(pwd) {
  return CryptoJS.SHA256(pwd).toString();
}

console.log(hashPassword('123456')); // 每次刷新页面结果都不同?!
我来解答 赞 0 收藏
二维码
手机扫码查看
1 条解答
UX倩利
UX倩利 Lv1
兄弟,CryptoJS.SHA256 本身是确定性的算法,同样的输入必然输出同样的结果,不可能每次不一样。

你先试试直接这样跑:

import CryptoJS from 'crypto-js';

console.log(CryptoJS.SHA256('123456').toString());
console.log(CryptoJS.SHA256('123456').toString());
console.log(CryptoJS.SHA256('123456').toString());


如果这三次输出不一样,那才是见鬼了。

问题大概率不在 SHA256 本身,而是你传进去的 password 本身每次就不一样。你可以打个日志看看:

function hashPassword(pwd) {
console.log('原始密码:', JSON.stringify(pwd)); // 看看有没有隐藏字符
return CryptoJS.SHA256(pwd).toString();
}


常见坑:用户输入前后有空格、换行符,或者你从表单取值时不知不觉带上了什么东西。

还有一个可能——你确定每次输入的密码真的一样?有些浏览器会自动填充密码,可能第一次你手动输入,第二次从自动填充里取,值会有差异。

先排查传入的值是不是真的一样,这个才是根因。
点赞
2026-03-13 23:07