本文簡要介紹ruby語言中 OpenSSL::Digest類
的用法。
OpenSSL::Digest
允許您計算加密安全的任意數據的消息摘要(有時可互換稱為 “hashes”),即 Digest
實現安全的 one-way 函數。
One-way 函數提供了一些有用的屬性。例如:給定兩個不同的輸入,兩者產生相同輸出的概率是極不可能的。結合每個消息摘要算法的固定長度輸出隻有幾個字節的事實,摘要通常用於為任意數據創建唯一標識符。一個常見的例子是為存儲在數據庫中的二進製文檔創建一個唯一的 id。
one-way 函數(以及名稱)的另一個有用特征是,給定一個摘要,沒有關於產生它的原始數據的指示,即識別原始輸入的唯一方法是通過所有可能的組合來識別 “brute-force”輸入。
這些特性使得one-way函數也是公鑰簽名算法的理想伴侶:不是對整個文檔進行簽名,而是首先使用更快的消息摘要算法生成文檔的哈希值,並且隻需要對其輸出的幾個字節進行簽名使用較慢的公鑰算法。要驗證簽名文檔的完整性,隻需重新計算哈希值並驗證它是否與簽名中的值相等。
您可以通過在終端中運行以下命令來獲取係統支持的所有摘要算法的列表:
openssl list -digest-algorithms
OpenSSL
1.1.1 支持的消息摘要算法包括:
-
SHA224、SHA256、SHA384、SHA512、SHA512-224 和 SHA512-256
-
SHA3-224、SHA3-256、SHA3-384 和 SHA3-512
-
BLAKE2s256 和 BLAKE2b512
這些算法中的每一個都可以使用以下名稱進行實例化:
digest = OpenSSL::Digest.new('SHA256')
“Breaking” 消息摘要算法意味著違背其one-way 函數特征,即產生衝突或通過比brute-forcing 等更有效的方式找到獲取原始數據的方法。大多數支持的摘要算法可以是從這個意義上說,即使是非常流行的 MD5 和 SHA1 算法也被認為是壞掉了。如果安全是您最關心的問題,那麽您可能應該依賴 SHA224、SHA256、SHA384 或 SHA512。
散列文件
data = File.binread('document')
sha256 = OpenSSL::Digest.new('SHA256')
digest = sha256.digest(data)
一次散列多條數據
data1 = File.binread('file1')
data2 = File.binread('file2')
data3 = File.binread('file3')
sha256 = OpenSSL::Digest.new('SHA256')
sha256 << data1
sha256 << data2
sha256 << data3
digest = sha256.digest
重用 Digest
實例
data1 = File.binread('file1')
sha256 = OpenSSL::Digest.new('SHA256')
digest1 = sha256.digest(data1)
data2 = File.binread('file2')
sha256.reset
digest2 = sha256.digest(data2)
相關用法
- Ruby Digest.update用法及代碼示例
- Ruby DigestIO.digests用法及代碼示例
- Ruby DigestIO.wrap用法及代碼示例
- Ruby Digest模塊用法及代碼示例
- Ruby Digest.<<用法及代碼示例
- Ruby Digest.block_length用法及代碼示例
- Ruby Digest.name用法及代碼示例
- Ruby Digest.digest用法及代碼示例
- Ruby Digest.digest_length用法及代碼示例
- Ruby Digest.new用法及代碼示例
- Ruby Dir.pos用法及代碼示例
- Ruby Dir.chdir用法及代碼示例
- Ruby Dir.read用法及代碼示例
- Ruby Dir.each_child用法及代碼示例
- Ruby Dir.mktmpdir用法及代碼示例
- Ruby Dir.entries用法及代碼示例
- Ruby Dir.tell用法及代碼示例
- Ruby Dir.fileno用法及代碼示例
- Ruby Dir.foreach用法及代碼示例
- Ruby DidYouMean模塊用法及代碼示例
- Ruby Dir.children用法及代碼示例
- Ruby Dir.glob用法及代碼示例
- Ruby Dir.pos =用法及代碼示例
- Ruby Dir.mkdir用法及代碼示例
- Ruby Dir.each用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 Digest類。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。