ruby – SHA哈希在OpenSSL库中签名文档的作用是什么?

我遵循
OpenSSL指令来生成签名.我使用ruby 2.1.0并生成这样的签名:

document = "This is a simple string document to be signed"
key = OpenSSL::PKey::RSA.new([private_key])
digest = OpenSSL::Digest::SHA256.new
signature = key.sign digest, document

签名被传输并到达要验证的目的地.为了验证,我喜欢这样:

key = OpenSSL::PKey::RSA.new([pubkey])
digest = OpenSSL::Digest::SHA256.new
key.verify digest, signature, document # => valid

这是有效的,因为如果我们只更改文档或签名的一个字母,则返回无效结果:

key.verify digest, signature, changed_document # => Invalid

但是使用不同的SHA,验证命令仍会产生有效结果:

digest = OpenSSL::Digest::SHA256.new('this will generate different SHA')
key.verify digest, signature, document # => valid

它困惑了我.不应该使用不同的SHA哈希导致无效结果吗?消化在这里扮演什么角色?

最佳答案 将参数传递给OpenSSL :: Digest :: SHA256.new会导致将数据添加到摘要中.

但是,openssl签名函数在使用之前重置摘要,因此额外数据在此特定情况下无效.

点赞