我正在关注 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 哈希值不应该导致无效结果吗? digest在这里的作用是什么?
最佳答案
将参数传递给 OpenSSL::Digest::SHA256.new
会导致该数据被添加到摘要中。
但是,openssl 签名函数会在使用摘要之前重置摘要,因此在这种特殊情况下额外的数据不会产生任何影响。
关于ruby - SHA 哈希在签署 OpenSSL 库中的文档时起什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24651088/