我有一个登录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吗?
我不知道为什么它会返回错误
答案 0 :(得分:4)
函数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
如果不了解服务器端代码,就无法继续前进。