如何在 Javascript 中将 md5 和编码为 base64

How to encode md5 sum to base64 in Javascript

我有一个登录 Web 表单,用户写下他的密码,我必须在 MD5 上加密它,并将总和加密为 base 64。我正在用 CryptoJS 这样做:

var hash = CryptoJS.MD5(cred.password); // password is `password`
cred.password = hash.toString(CryptoJS.enc.Base64); // X03MO1qnZdYdgyfeuILPmQ==  --  IT IS OK!

这很好用。然后我也必须将以下字符串转换为 MD5 和 Base64:

var digest = "john.doe,"+hash.toString()+",QCiTzbXCAYA3AvDgYN3MuBwY/1i89q6TfW7aVS1Av1c=";

我又做了:

var hash1 = CryptoJS.MD5(digest);
digestResult = hash1.toString(CryptoJS.enc.Base64);

它 returns i4a9M2b6l+yBZLHc3bXWMA== 但服务器对此组合的预期是 6R1HZqYJFfRQUA0L/hqCEA==

我猜 Crypto 不能用于要转换的字符串中的 base64/md5?

我不明白为什么 returns 不好

函数CryptoJS.MD5(cred.password)returns一个typedArray,不是字符串。它有一个 toString 函数,returns 常用的十六进制表示。所有这些都不会很好地融合在一起。您需要探测 client/server 字符串以查看一个发送什么而另一个接受什么,但是您应该一直使用十六进制字符串表示直到最终的 base64 编码,将它们混合在一起不是很健康。 编辑 在 OP

给出一些评论后
var hash = CryptoJS.MD5(cred.password); // password is `password`
// "hash" contains a typed array, needs to be base64
hash = hash.toString(CryptoJS.enc.Base64); // X01jw2Jap2XWHYMn3riCz5k=
var digest = "john.doe,"+hash+",QCiTzbXCAYA3AvDgYN3MuBwY/1i89q6TfW7aVS1Av1c=";
digest = CryptoJS.MD5(digest);
digest = digest.toString(CryptoJS.enc.Base64); // jH+dH56sKswaDDfeCzDY0A==
// send "digest" to server

如果不了解服务器端代码就无法更进一步。