gpt4 book ai didi

javascript - Ruby 和 JavaScript 的 MD5 值不同

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:49 25 4
gpt4 key购买 nike

我需要能够从客户端 JavaScript 应用程序和使用 Ruby 的服务器上对同一文件运行 MD5 哈希。

目前我无法让两个哈希值相同。

在客户端,我使用 JQuery File Upload将文件上传到 S3 存储桶。我正在使用 Crypto在回调中散列文件:

file =  data.files[0]
filename = file.name;
md5 = CryptoJS.MD5(CryptoJS.enc.Hex.parse(data.files[0].toString()));

这给了我:ee9cd5bf4272fc35bd57d184553bd25b

在 Ruby 中,它是一个模块 Digest::MD5 Gem 使用的模块进行散列:

Digest::MD5.file(file).to_s

这给了我:4d51c9a4d3fd076489d6c96614ebce61

我无法控制 Ruby 方面的事情,但为什么 Crypto 生成的校验和可能不同?

请注意,我可以使用相同的 API 在本地进行测试:

path = 'path/to/file.jpg'
Digest::MD5.file(f).hexdigest
# 4d51c9a4d3fd076489d6c96614ebce61

文件是一个大的 jpg (~ 1.8meg)

更新:针对@kxyz 的回答,crypto-js 使用不同编码器的结果是:

CryptoJS.MD5(CryptoJS.enc.Hex.parse(data.files[0].toString()));
// ee9cd5bf4272fc35bd57d184553bd25b

CryptoJS.MD5(CryptoJS.enc.Utf8.parse(data.files[0].toString()));
// 709d1d31dc47636e4f5ccbfd07601c19

CryptoJS.MD5(CryptoJS.enc.Latin1.parse(data.files[0].toString()));
// 709d1d31dc47636e4f5ccbfd07601c19

我还使用 bash md5 检查了原始文件和从 S3 下载的复制文件,这两个文件生成了相同的哈希值:

4d51c9a4d3fd076489d6c96614ebce61 与 Ruby 生成的哈希相同。

还使用 online hasher 检查了哈希:

4d51c9a4d3fd076489d6c96614ebce61

最佳答案

您使用 CryptoJS.enc.Latin1 并且在 Ruby 中您没有定义编码 Digest::MD5.file(file).to_s。请务必使用相同的编码。

尝试

Digest::MD5.hexdigest('foobar')

CryptoJS.MD5(CryptoJS.enc.Hex.parse('foobar'));

关于javascript - Ruby 和 JavaScript 的 MD5 值不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31233636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com