2010-05-24 8 views
2

Je cherchais une méthode portable pour signer numériquement un texte arbitraire qui peut être placé dans un document et distribué tout en conservant son origine vérifiable. Voici un exemple:Comment signer un texte de manière vérifiable à partir de ruby ​​d'une manière simple mais solide et portable?

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

Le contenu d'un can peut maintenant être distribué librement. Si un récepteur veut vérifier la validité dudit texte qu'ils peuvent effectuer les opérations suivantes:

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

Y at-il là-bas bibliothèque qui offre déjà ce type de fonctionnalité? La bibliothèque standard de Ruby contient le code de hachage SHA, donc au moins il y a un moyen portable d'effectuer le hachage, mais à partir de ce point, j'ai du mal à trouver quelque chose qui corresponde au but.

Cordialement,

Roja

Répondre

2

Que voulez-vous dire par "portable"? Est-ce que openssl est suffisamment portable pour vous? Voici un nice article par Ola Bini sur différents scénarios en rubis. Essentiellement, voici comment signer et vérifier un message:

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