如何在Javascript中将md5 sum编码为base64
我有一个登录web表单,用户写下他的密码,我必须在MD5上加密它,并将其和基数64相加。我用CryptoJS做的就是这样:如何在Javascript中将md5 sum编码为base64,javascript,base64,md5,cryptojs,Javascript,Base64,Md5,Cryptojs,我有一个登录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和
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==
但服务器对此组合的预期值是6r1hzqyjffrqa0l/hqCEA==
我猜Crypto不适用于要转换的字符串中的base64/md5
我不明白为什么它返回bad函数
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
如果不了解服务器端代码,则无法进一步操作。函数
CryptoJS.MD5(cred.password)
返回类型Darray,而不是字符串。它有一个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
如果不知道服务器端代码,则无法进一步操作。“密码,我必须在MD5上加密”,请使用类似于bcrypt的内容,而不是MD5。抱歉,但我必须使用MD5,我不能使用其他内容。MD5中要求使用服务器端方法,我无法更改方法。请不要期待任何回复,MD5永远不应该用于密码哈希。我知道,很遗憾我没有决定“密码,我必须在MD5上加密”,请使用类似bcrypt的东西,而不是MD5。对不起,但我必须使用MD5,我不能使用其他东西服务器端方法在MD5中预期的,我不能更改方法。不要期待任何回复,MD5永远不应该用于密码哈希。我知道,很遗憾,我没有决定这样做。我已经更新了toString()
,但是,我仍然得到不同的值。我必须发布到a REST服务的摘要和cred.password(使用其他值),它会检查摘要。。但是它并没有在末尾创建相同的base64字符串。我们需要更多:例如输入cred.password
,让我们使用字符串“password”。该字符串的MD5sum(使用coreutils中的MD5sum
测试)是5f4dcc3b5aa765d61d8327deb882cf99
。您的输出是否与该字符串相同?服务器希望该确切密码使用什么字符串?您如何处理您放入cred.password
中的base64编码字符串?是的,这就是字符串。根据后端程序员的说法,这个字符串john.doe,5f4dcc3b5aa765d61d8327deb882cf99,QCiTzbXCAYA3AvDgYN3MuBwY/1i89q6TfW7aVS1Av1c=
到MD5,然后再到Base64应该返回6r1hzqyjffrqa0l/hqCEA=
john.doe,5f4dcc3b5aa765d61d8327qc882cf99,itzbxcayavdgyn3mubwy/1i89q6tav的中间MD5和是多少S1Av1c=“应该是什么?我在Base64中获得了a296523291d1d7af4543c67cba8574ae
,它转换为OwexOgyym2Zhm2JiodnlymiyMi5MwQ4otm4nj3MTGGIC0K
,根据密码,MD5返回1C55C9F294F726A11C408F7B527E604
。:/我已经将更新为字符串()
,但是,我仍然得到不同的值。我必须发布到a REST服务的摘要和cred.password(使用其他值),它会检查摘要。。但是它并没有在末尾创建相同的base64字符串。我们需要更多:例如输入cred.password
,让我们使用字符串“password”。该字符串的MD5sum(使用coreutils中的MD5sum
测试)是5f4dcc3b5aa765d61d8327deb882cf99
。您的输出是否与该字符串相同?服务器希望该确切密码使用什么字符串?您如何处理您放入cred.password
中的base64编码字符串?是的,这就是字符串。根据后端程序员的说法,这个字符串john.doe,5f4dcc3b5aa765d61d8327deb882cf99,QCiTzbXCAYA3AvDgYN3MuBwY/1i89q6TfW7aVS1Av1c=
到MD5,然后再到Base64应该返回6r1hzqyjffrqa0l/hqCEA=
john.doe,5f4dcc3b5aa765d61d8327qc882cf99,itzbxcayavdgyn3mubwy/1i89q6tav的中间MD5和是多少S1Av1c=“应该是什么?我在Base64中获得了a296523291d1d7af4543c67cba8574ae
,根据密码,MD5返回1c55c9f294f726a11c408f77b527e604
:/