如何在 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
如果不了解服务器端代码就无法更进一步。
我有一个登录 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
如果不了解服务器端代码就无法更进一步。