计算文件完整性和压缩 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")
我们现在有 sha2
或 sha256
,这又比 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
通过 ruby 通过网络传输后确定文件完整性的最受追捧的方法是什么?
我正在尝试编写将文件分成块的软件,计算块的校验和,然后将文件块连同校验和一起发送给客户端(可能不是按该顺序或方法,但是校验和的计算将包括在内 none 越少)。
我正在寻找 rubies 库原生的散列函数,并且能够根据块大小及时计算。正在传输的文件通常约为 500mb,但有时高达或大于 7gb,因此哈希函数必须能够相当快地处理少量或大量(取决于块大小)块。
我已经通过 Zlib 和摘要中的 MD5 研究了 crc32,但我想知道是否还有其他我应该研究的函数可能更快,或者哪些函数最适合这项任务。
此外,我可以在 ruby 中使用的最佳压缩方法是什么,它对于网络文件传输来说足够高效,并且可能会节省一些传输数据的时间。
文件完整性
md5
通常是最快的散列方法,但从加密安全的角度来看,现在被认为已损坏。
在 md5
之后,sha1
非常流行(并且速度稍慢),直到现在,从密码安全的角度来看,它也被认为是不够的。
require 'digest/sha1'
Digest::SHA1.hexdigest("hello world")
我们现在有 sha2
或 sha256
,这又比 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