4
我正在遵循OpenSSL指令來生成簽名。我正在使用ruby 2.1.0並生成類似如下的簽名:SHA hash在OpenSSL庫中籤署文檔有什麼作用?
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哈希導致無效結果?摘要在這裏的作用是什麼?
您能否提供更多信息?爲什麼要這樣做? _不應該有不同的SHA哈希導致無效結果?_ –
這是相同的SHA哈希函數。在第二種情況下,您提供了一些初始數據,這些數據會被丟棄,因此結果就好像初始數據並不在首位。至於爲什麼我認爲它可以更容易地重用摘要對象 –
好的。正如您所看到的,我正在嘗試對文檔進行數字簽名。那我能否假設我用來簽署文件的方法是正確的? –