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

How to encode md5 sum to base64 in Javascript

本文关键字:sum 编码 base64 md5 中将 Javascript      更新时间:2023-09-26

我有一个登录web表单,用户写下他的密码,我必须用MD5加密,并且总和以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);

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

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

我不明白为什么它返回糟糕的

函数CryptoJS.MD5(cred.password)返回的是typedArray,而不是字符串。它有一个toString函数,返回常见的十六进制表示。所有这些都不能很好地结合在一起。您需要探查客户端/服务器字符串,看看其中一个发送了什么,另一个接受了什么,但您应该一直使用十六进制字符串表示,直到最终的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

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