计算文件完整性和压缩 ruby

Calculating a files integrity and compression ruby

通过 ruby 通过网络传输后确定文件完整性的最受追捧的方法是什么?

我正在尝试编写将文件分成块的软件,计算块的校验和,然后将文件块连同校验和一起发送给客户端(可能不是按该顺序或方法,但是校验和的计算将包括在内 none 越少)。

我正在寻找 rubies 库原生的散列函数,并且能够根据块大小及时计算。正在传输的文件通常约为 500mb,但有时高达或大于 7gb,因此哈希函数必须能够相当快地处理少量或大量(取决于块大小)块。

我已经通过 Zlib 和摘要中的 MD5 研究了 crc32,但我想知道是否还有其他我应该研究的函数可能更快,或者哪些函数最适合这项任务。

此外,我可以在 ruby 中使用的最佳压缩方法是什么,它对于网络文件传输来说足够高效,并且可能会节省一些传输数据的时间。

文件完整性

md5 通常是最快的散列方法,但从加密安全的角度来看,现在被认为已损坏。

md5 之后,sha1 非常流行(并且速度稍慢),直到现在,从密码安全的角度来看,它也被认为是不够的。

require 'digest/sha1'
Digest::SHA1.hexdigest("hello world")

我们现在有 sha2sha256,这又比 sha1 稍慢,但在密码安全方面是当前的王者。

require 'digest/sha2'
Digest::SHA2.hexdigest("hello world")

相关 StackExchange 问题:

https://security.stackexchange.com/questions/34488/using-md5-for-file-integrity-checks

即使您仅将哈希用于文件完整性检查,而不是用于加密目的,我们仍然建议您为此目的使用安全的哈希函数。

文件压缩:

您应该能够使用 gzip 来压缩文件流。你可以先压缩文件,然后发送这个压缩文件,或者你可以在将文件推送到套接字的同时即时压缩文件(如果每次都必须压缩文件,这可能会很浪费)。

http://ruby-doc.org/stdlib-1.9.3/libdoc/zlib/rdoc/Zlib/GzipWriter.html

要即时压缩文件,请尝试

gz = Zlib::GzipWriter.new(socket)
gz.write 'jugemu jugemu gokou no surikire...'
gz.close