【问题标题】:How to encode md5 sum to base64 in Javascript如何在Javascript中将md5 sum编码为base64
【发布时间】:2015-12-05 20:00:14
【问题描述】:

我有一个登录 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?

我不明白为什么它返回错误

【问题讨论】:

  • "密码,我必须在 MD5 上加密",请使用 bcrypt 而不是 MD5。
  • 对不起,我必须用MD5,我不能用别的东西
  • 服务器端方法在MD5中,我无法更改方法
  • 不要指望任何回复,MD5 不应该用于密码散列。
  • 我知道,遗憾的是我没有决定这个

标签: javascript base64 md5 cryptojs


【解决方案1】:

函数CryptoJS.MD5(cred.password) 返回一个typedArray,而不是一个字符串。它有一个toString 函数,它返回常见的十六进制表示。所有这些都不能很好地结合在一起。您需要探测客户端/服务器字符串以查看一个发送和另一个接受的字符串,但您应该使用十六进制字符串表示一直到最终的 base64 编码,混合它们不是很健康。 EDIT 在 OP 给出的一些 cmets 之后

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

如果不了解服务器端代码,就无法走得更远。

【讨论】:

  • 我已经更新了toString(),但是,我仍然得到了不同的价值。我必须将摘要和 cred.password 发布到 REST 服务(使用其他值),它会检查摘要..但它最后没有创建相同的 base64 字符串
  • 我们需要更多:cred.password 的示例输入,让我们使用字符串“密码”。该字符串的 MD5sum(使用 coreutils 中的 md5sum 测试)是 5f4dcc3b5aa765d61d8327deb882cf99。对于那个确切的字符串,您的输出是否相同?服务器期望该确切密码的字符串是什么?你如何处理你在cred.password 中输入的 base64 编码字符串?
  • 是的,这是字符串。根据后端程序员的说法,这个字符串 john.doe,5f4dcc3b5aa765d61d8327deb882cf99,QCiTzbXCAYA3AvDgYN3MuBwY/1i89q6TfW7aVS1Av1c= 到 MD5 然后到 Base64 应该返回 6R1HZqYJFfRQUA0L/hqCEA==
  • “john.doe,5f4dcc3b5aa765d61d8327deb882cf99,QCiTzbXCAYA3AvDgYN3MuBwY/1i89q6TfW7aV‌​S1Av1c=" 的中间 MD5sum 应该是什么?我得到了a296523291d1d7af4543c67cba8574ae,它在base64中转换为OWExOGYyM2ZhM2JiODNlYmIyYmI5MWQ4OTM4NjE3MTggIC0K
  • 根据 Crypto,MD5 返回 1c55c9f294f726a11c408f77b527e604 :/
猜你喜欢
  • 2010-09-19
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
相关资源
最近更新 更多