当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Digest类用法及代码示例


本文简要介绍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-lang.org大神的英文原创作品 Digest类。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。