我希望使用Java来获取文件的MD5校验和.我真的很惊讶,但我找不到任何显示如何获取文件的MD5校验和的内容.
怎么做?
有没有简单的方法来生成(和检查)Python中文件列表的MD5校验和?(我有一个小程序,我正在研究,我想确认文件的校验和).
典型的方法建议通过FileStream读取二进制文件并逐字节地比较它.
我必须在一些机器上同步大文件.这些文件最大可达6GB.同步将每隔几周手动完成.我不能考虑文件名,因为它们可以随时更改.
我的计划是在目标PC和源PC上创建校验和,然后将所有尚未在目标中的校验和文件复制到目标.我的第一次尝试是这样的:
using System.IO;
using System.Security.Cryptography;
private static string GetChecksum(string file)
{
using (FileStream stream = File.OpenRead(file))
{
SHA256Managed sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(stream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是运行时:
- 使用带有1,6 GB文件的SHA256 - > 20分钟
- 使用带有1.6 GB文件的MD5 - > 6.15分钟
是否有更好 - 更快 - 获得校验和的方法(可能具有更好的散列函数)?
存储在树对象git ls-tree
中的SHA1哈希值(由返回的sha1sum
)与文件内容的SHA1哈希值不匹配(由返回)
$ git cat-file blob 4716ca912495c805b94a88ef6dc3fb4aff46bf3c | sha1sum
de20247992af0f949ae8df4fa9a37e4a03d7063e -
Run Code Online (Sandbox Code Playgroud)
git如何计算文件哈希值?它是否在计算哈希值之前压缩内容?
我的理解是哈希码和校验和是类似的东西 - 为数据块计算的数值,它是相对独特的.
即,产生相同数字散列/校验和值的两个数据块的概率足够低,以至于出于应用目的可以忽略它.
那么我们是否有两个单词用于相同的事情,或者哈希码和校验和之间是否存在重要差异?
也许我只是没有看到它,但CRC32似乎不必要地复杂化,或者在我能在网上找到的任何地方都没有充分解释.
我理解它是消息值的非基于进位的算术除法的余数除以(生成器)多项式,但它的实际实现逃脱了我.
我读过CRC无错误检测算法的指南,我必须说它不是无痛的.它完全超越了理论,但作者从未得到过简单的"就是这样".他确实说过标准CRC32算法的参数是什么,但是他忽略了如何清楚地列出它.
得到我的部分就是当他说"这就是它"然后补充说,"顺便说一句,它可以逆转或以不同的初始条件开始",并没有给出最终方式的明确答案在给出他刚刚添加的所有更改的情况下计算CRC32校验和.
我试图在C中编写表格的形式:
for (i = 0; i < 256; i++)
{
temp = i;
for (j = 0; j < 8; j++)
{
if (temp & 1)
{
temp >>= 1;
temp ^= 0xEDB88320;
}
else {temp >>= 1;}
}
testcrc[i] = temp;
}
Run Code Online (Sandbox Code Playgroud)
但这似乎产生的价值与我在互联网上其他地方找到的价值观不一致.我可以使用我在网上找到的值,但我想了解它们是如何创建的.
任何帮助清除这些令人难以置信的令人困惑的数字将非常感激.
我在Windows机器上,我想在我刚刚获得的MySQL发行版上运行校验和.看起来有些产品需要下载,不支持的Microsoft工具以及其他可能的选项.我想知道是否有最佳工具的共识.这可能是一个非常简单的问题,我以前从未运行过校验和例程.
给定两个不同的字符串S1和S2(S1!= S2)可能是:
SHA1(S1) == SHA1(S2)
Run Code Online (Sandbox Code Playgroud)
是真的?
我想要实现的目标是散列一些敏感的ID字符串(可能与其他字段(如父ID)连接在一起),这样我就可以使用散列值作为ID(例如在数据库中).
例:
Resource ID: X123
Parent ID: P123
Run Code Online (Sandbox Code Playgroud)
我不想公开我的资源标识的性质,以允许客户端看到"X123-P123".
相反,我想创建一个新的列散列("X123-P123"),让我们说它是AAAZZZ.然后客户端可以请求ID为AAAZZZ的资源,而不知道我的内部id等.
在我的应用程序中,我需要为文件生成MD5校验和.你能告诉我是否有办法实现这一目标?
谢谢.