Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中将md5 sum编码为base64_Javascript_Base64_Md5_Cryptojs - Fatal编程技术网

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

如何在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和

我有一个登录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==
但服务器对此组合的预期值是
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
:/