我有一个登录 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==
我猜加密货币不适用于要转换的字符串内的 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
如果不了解服务器端代码,就无法进一步进行。
关于javascript - 如何在Javascript中将md5和编码为base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34110192/