javascript - 如何在Javascript中将md5和编码为base64

标签 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 和 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/

相关文章:

javascript - Angular JS 中的 Lodash - 获取 TypeError : Object function lodash(value)

bash - 如何使用powershell将sha256哈希输出作为二进制数据而不是十六进制数据?

google-app-engine - com.google.appengine.api.blobstore.BlobInfo 的 md5Hash 是如何计算的

javascript - 为什么 Firebug 显示重复的 $_POST 请求?

javascript - 谷歌地图 API : Map width gets resized onclick but route is still loaded with original width

javascript - 使用 XMLHttpRequest 对象加载扩展名与 .xml 不同的 XML 格式文件

css - 有没有办法将相同的 base64 数据 URI 与两个 @font-face 声明一起使用?

file - Angular 2 将图像编码为 base64

md5 - 以MD5格式发送数据

php - 为什么 MD5'ing UUID 不是一个好主意?