【问题标题】:Calculating a files integrity and compression ruby计算文件完整性和压缩红宝石
【发布时间】:2015-05-11 02:09:53
【问题描述】:

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

我正在尝试编写将文件分成块的软件,计算块的校验和,然后将文件块与校验和一起发送到客户端(可能不是按那个顺序或方法,而是计算校验和将包括在内)。

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

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

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

【问题讨论】:

    标签: ruby linux windows hash checksum


    【解决方案1】:

    文件完整性

    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
    

    【讨论】:

    • 感谢您的回答,我将检查基准,看看是否值得付出额外的时间。我没有将其用作密码学的一部分,而只是作为一种简单的损坏检查机制。我还编辑了我的问题以包含有关压缩的问题,如果您有任何相关信息,那就太好了。
    猜你喜欢
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2011-02-06
    • 2017-12-19
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多