Как подписать текст проверяемым способом из рубина простым, но надежным и переносимым способом? - PullRequest
2 голосов
/ 24 мая 2010

Я искал портативный метод для цифровой подписи произвольного текста, который может быть помещен в документ и распространен при сохранении его проверяемого происхождения. Вот пример:

a = 'some text'
a.sign(<private key>) # => <some signature in ASCII format>

Содержимое теперь можно свободно распространять. Если получатель хочет проверить правильность указанного текста, он может сделать следующее:

b = 'some text'
b.valid(<public key>, <signature supplied with text>) # => true/false

Есть ли какая-нибудь библиотека, которая уже предлагает такую ​​функциональность? Стандартная библиотека Ruby содержит код хеширования SHA, так что, по крайней мере, существует переносимый способ хеширования, но с этого момента я изо всех сил пытаюсь найти что-нибудь подходящее для цели.

С уважением,

Roja

1 Ответ

2 голосов
/ 24 мая 2010

Что вы подразумеваете под «портативный»?openssl достаточно портативен для вас?Вот замечательная статья Олы Бини * 1003 о различных сценариях в ruby.По сути, вы должны подписать и проверить сообщение:

require 'openssl'

pub_key = OpenSSL::PKey::RSA.new(File.read("public_key.pem"))
priv_key = OpenSSL::PKey::RSA.new(File.read("private_key.pem"))

text = "This is the text I want to send"*200

signature = priv_key.sign(OpenSSL::Digest::SHA1.new,text)

if pub_key.verify(OpenSSL::Digest::SHA1.new, signature, text)
  puts "Signature verified"
else
  puts "Signature NOT verified"
end
...