标签: md5sum

如何使用 python 中现有的哈希器更新 hashlib.md5 哈希器?

我有哈希器的缓存实例:

m1 = hashlib.md5()
m1.update(b'very-very-long-data')
cached_sum = m1
Run Code Online (Sandbox Code Playgroud)

我想用之前缓存的总和更新外部哈希器:

def append_cached_hash(external_hasher):
    # something like this
    external_hasher.update(cached_sum)
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不起作用,因为 update() 需要字节。我可以再次传递相同的“非常非常长的数据”字节,但它拒绝了为常见的长数据对象预缓存 md5 和的整个想法。

我可以做如下的事情:

external_hasher.update(cached_sum.hexdigest())
Run Code Online (Sandbox Code Playgroud)

但是,它不会产生与以下相同的所需结果:

external_hasher.update(b'very-very-long-data')
Run Code Online (Sandbox Code Playgroud)

我该如何实现上面的功能呢?


同样的问题可以有不同的表述。有3个大数据集,需要使用python计算所有可能组合的md5和。允许每个数据源计算一次md5。

m1 = hashlib.md5(b'very-big-data-1')
m2 = hashlib.md5(b'very-big-data-2')
m3 = hashlib.md5(b'very-big-data-3')
Run Code Online (Sandbox Code Playgroud)

下面的打印函数的第二个参数应该写什么才能达到目的?

print("sum for data 1 and data 2 is:", m1.update(m2))
print("sum for data 1 and data 3 is:", m1.update(m3))
print("sum for data 2 and data 3 is:", m2.update(m3))
print("sum for data 1, data 2 and data 3 is:", m1.update(m2.update(m3)))
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!

python md5 hashlib md5sum

5
推荐指数
1
解决办法
3149
查看次数

在JavaScript中预期的MD5计算性能?

我正在尝试使用javascript计算MD5并在JavaScript中查看 最快的MD5实现 'JKM'实现被认为是更快的实现之一.我正在使用基于JKM实现的SparkMD5.但是提供的示例https://github.com/satazor/SparkMD5/blob/master/test/readme_example.html对于13MB文件大约需要10秒(使用调试器大约需要23秒),而同一文件只需要0.03秒使用md5sum函数linux命令行.这些结果对于javascript实现来说是否太慢或预计会出现这种糟糕的性能?

javascript md5 md5sum

5
推荐指数
1
解决办法
1275
查看次数

`md5sum -c` 不适用于 Apache 的 MD5 文件格式

让我带你去旅行..

我试图下载和验证Apache的火花(http://www.apache.org/dist/spark/spark-1.6.0/spark-1.6.0-bin-hadoop2.6.tgz通过MD5上一个新) Debian(杰西)机器。

md5sum脚本已经存在这台机器上没有我需要做什么。

因此,我继续将 MD5 校验和(http://www.apache.org/dist/spark/spark-1.6.0/spark-1.6.0-bin-hadoop2.6.tgz.md5)下载到同一目录作为下载的 Spark,然后我执行:

md5sum -c spark-1.6.0-bin-hadoop2.6.tgz.md5
Run Code Online (Sandbox Code Playgroud)

这失败了:

md5sum: spark-1.6.0-bin-hadoop2.6.tgz.md5: no properly formatted MD5 checksum lines found
Run Code Online (Sandbox Code Playgroud)

所以我通过cat spark-1.6.0-bin-hadoop2.6.tgz.md5以下方式检查内容:

spark-1.6.0-bin-hadoop2.6.tgz: 62 4B 16 1F 67 70 A6 E0  E0 0E 57 16 AF D0 EA 0B
Run Code Online (Sandbox Code Playgroud)

这就是整个文件。对我来说看起来不错 - 也许 Spark 下载实际上很糟糕?在采取该假设之前,我将首先通过md5sum spark-1.6.0-bin-hadoop2.6.tgz以下方式查看 MD5 的内容:

624b161f6770a6e0e00e5716afd0ea0b  spark-1.6.0-bin-hadoop2.6.tgz
Run Code Online (Sandbox Code Playgroud)

嗯,这是一种完全不同的格式——但如果你仔细观察,你会发现数字和字母实际上是一样的(除了小写和没有空格)。看起来md5sumDebian 附带的 遵循不同的标准。

也许还有另一种方法可以运行此命令?让我们试试md5sum --help

Usage: md5sum [OPTION]... [FILE]...
Print or check MD5 (128-bit) checksums.
With …
Run Code Online (Sandbox Code Playgroud)

apache md5sum

5
推荐指数
1
解决办法
791
查看次数

md5哈希计算函数失败

我正在尝试编写一个 md5 哈希函数而不R调用任何 C 例程。虽然我的代码执行得很好,但输出永远不会匹配tools::md5sum(它确实与各种在线文档中提供的示例匹配)。我怀疑某个地方存在字节顺序(或字顺序)问题;正如下面提供的代码所示,我尝试插入一些触发器,但没有成功。\n我检查了输出中是否存在简单的不匹配,例如正确的字节,但顺序错误,但没有成功。

\n

要运行此函数,您需要库Rmpfr以及bigBits此处提供的函数(flip32flip16bigRotate)。

\n
# need these to run:\nlibrary(Rmpfr)\nlibrary(bigBits)\n\nmymd5 <- function(msg){\n\n  if(!is(msg,'raw')) msg <- charToRaw(as.character(msg))\n# a const to be used when truncating values > ffffffff\ntwo32 <- as.bigz(2^(as.bigz(32))) \n\nsidx <- c( 7, 12, 17, 22,  7, 12, 17, 22,  7, 12, 17, 22,  7, 12, 17, 22 , 5,  9, 14, 20,  5,  9, 14, 20,  5,  9, 14, 20,  5,  9, 14, …
Run Code Online (Sandbox Code Playgroud)

md5 r endianness md5sum

5
推荐指数
1
解决办法
253
查看次数

快速md5sum在bash/ubuntu上的数百万字符串

我需要在ubuntu上的bash脚本中使用300万个字符串的MD5总和.300万字符串 - > 300万MD5哈希值.每个字符串实现大约需要0.005秒.那是4个多小时.有哪些更快的替代品?有没有办法将字符串组泵入md5sum?

#time md5sum running 100 times on short strings
#each iteration is ~0.494s/100 = 0.005s
time (for i in {0..99}; do md5sum <(echo $i); done) > /dev/null

real    0m0.494s
user    0m0.120s
sys     0m0.356s
Run Code Online (Sandbox Code Playgroud)

一个好的解决方案将包括一个bash/Perl脚本,它从stdin中获取一个字符串列表并输出一个MD5哈希值列表.

ubuntu md5 md5sum

4
推荐指数
2
解决办法
3129
查看次数

如何验证VB 6可执行文件的2个副本来自相同的代码库?

我有一个版本控制下的程序经历了多个版本.今天出现了一种情况,有人以某种方式设法指向程序的旧副本,因此遇到了已修复的错误.我想回去,只删除程序的所有旧副本(保持它们是一个公司策略,可以在版本控制之前发生,并且不再需要)但我需要一种方法来验证我可以生成完全相同的可执行文件,比说"旧版本来自此提交,因此这个应该是相同的"更好.

我最初的想法是简单地MD5哈希可执行文件,将哈希文件存储在源代码控制中,并完成它但我遇到了一个我甚至无法解析的问题.

似乎每次生成可执行文件(方法:打开项目.文件>生成X.exe)时,它的哈希值都不同.我注意到,每当项目以看似随机的方式打开时,Visual Basic会混淆文件,但我认为这不会成为可执行文件,也没有任何证据表明确实发生了什么.为了防止这种情况,我尝试在同一个IDE会话中多次生成可执行文件并检查哈希值,但每次都是不同的.

所以那是:

  1. 生成可执行文件
  2. 生成MD5校验和: md5sum X.exe > X.md5
  3. 验证MD5当前可执行文件: md5sum -c X.md5
  4. 生成新的可执行文件
  5. 验证MD5的新可执行文件: md5sum -c X.md5
  6. 验证失败,因为计算的校验和不匹配.

我不了解MD5或VB 6生成可执行文件的方式,但我也没有与使用MD5的想法结合.如果有更好的方法来验证两个可执行文件确实是相同的那么我就是全部.

在此先感谢您的帮助!

vb6 hash md5 md5sum binary-reproducibility

4
推荐指数
1
解决办法
1623
查看次数

如何在python中创建为相同内容保留相同md5哈希的存档?

正如本文https://medium.com/@mpreziuso/is-gzip-deterministic-26c81bfd0a49 中所解释的,两个 .tar.gz 文件的 md5 是完全相同的一组文件的压缩可以不同。例如,这是因为它在压缩文件的标题中包含时间戳。

在文章中提出了 3 个解决方案,我希望使用第一个解决方案:

我们可以在 gzip 中使用 -n 标志,这将使 gzip 省略文件头中的时间戳和文件名;

这个解决方案效果很好:

tar -c ./bin |gzip -n >one.tar.gz
tar -c ./bin |gzip -n >two.tar.gz
md5sum one.tgz two.tgz
Run Code Online (Sandbox Code Playgroud)

尽管如此,我不知道在 python 中做这件事的好方法是什么。有没有办法用 tarfile(https://docs.python.org/2/library/tarfile.html)来做到这一点?

gzip tar md5sum python-2.7

4
推荐指数
2
解决办法
1531
查看次数

如何在 Deno 中获取文件校验和?

刚从 Deno 开始,我试图弄清楚如何计算二进制文件校验和。在我看来,问题不在于标准库的哈希模块提供的方法,而在于文件流方法和/或提供 hash.update 方法的块的类型。我一直在尝试一些与文件打开和块类型相关的替代方案,但没有成功。一个简单的例子如下:

import {createHash} from "https://deno.land/std@0.80.0/hash/mod.ts";

const file= new File(["my_big_folder.tar.gz"], "./my_big_folder.tar.gz");
const iterator = file.stream() .getIterator();
const hash = createHash("md5");
for await( let chunk of iterator){
   hash.update(chunk);
}
console.log(hash.toString()); //b35edd0be7acc21cae8490a17c545928
Run Code Online (Sandbox Code Playgroud)

这段代码编译并运行没有错误,遗憾的是结果与我运行node提供的crypto模块的函数和linux coreutils提供的md5sum的结果不同。有什么建议吗?

节点代码:

const crypto = require('crypto');
const fs = require('fs');

const hash = crypto.createHash('md5');

const file = './my_big_folder.tar.gz';
const stream = fs.ReadStream(file);
stream.on('data', data=> { hash.update(data); });
stream.on('end', ()=> {
  console.log(hash.digest('hex')); //c18f5eac67656328f7c4ec5d0ef5b96f
});

Run Code Online (Sandbox Code Playgroud)

bash 中的结果相同:

$ md5sum ./my_big_folder.tar.gz
$ c18f5eac67656328f7c4ec5d0ef5b96f ./my_big_folder.tar.gz
Run Code Online (Sandbox Code Playgroud)

在 Windows 10 上可以使用:

import …
Run Code Online (Sandbox Code Playgroud)

checksum stream md5sum sha1sum deno

4
推荐指数
1
解决办法
999
查看次数

MD5哈希,Python 3.如何在Python中生成

我需要有关如何获取zip文件的md5哈希的建议.我将使用ftplib不断从ftp下载文件.如您所知,ftplib无法判断文件是否已被修改.

我想通过简单地比较将新文件下载到tempdir后的哈希值来使用每个新文件的md5哈希来判断它是否已被修改.如果哈希值相似,我删除新下载的文件.但是,如果哈希值不同,则保留新下载的文件,旧哈希值将替换为新哈希值并继续执行脚本.

请告知如何实现这一目标.是否有用于散列md5或类似的独立模块.

Thanks.``

md5 md5sum md5-file python-3.x

3
推荐指数
1
解决办法
2980
查看次数

使用 md5 哈希值或文件长度进行文件比较?

我在磁盘上有一个文件列表,我需要获取这些文件并将其加载到内存中。我创建了一个FileConfig类,如下所示,其中包含每个文件的所有元数据。

public class FileConfig
{
    public string FileName { get; set; }
    public DateTime Date { get; set; }
    public string FileContent { get; set; }
    public string MD5Hash { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

MD5Hash为每个文件都有一个字符串,以便稍后可以将其与其他一些文件进行比较,以确定特定文件是否不同。

FileConfig下面是我的代码,我从磁盘获取所有文件的列表,然后从中创建对象列表。

private IEnumerable<FileConfig> LoadFiles(string path)
{
    IList<string> files = procUtility.GetListOfFiles(path);
    if (files == null || files.Count == 0) { yield return default; }

    for (int i = 0; i < files.Count; i++)
    {
        var cfgPath = files[i];
        if (!File.Exists(cfgPath)) { …
Run Code Online (Sandbox Code Playgroud)

c# md5sum asp.net-core

3
推荐指数
1
解决办法
4613
查看次数