代码之家  ›  专栏  ›  技术社区  ›  Roja Buck

如何从Ruby内部以一种简单而强大且可移植的方式对文本进行可验证的签名?

  •  2
  • Roja Buck  · 技术社区  · 16 年前

    我一直在寻找一种可移植的方法来对任意文本进行数字签名,这些文本可以放置在文档中并分发,同时保持其可验证的来源。下面是一个例子:

    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散列代码,所以至少有一种可移植的方法来执行散列,但是从这一点上,我正在努力寻找任何符合目的的方法。

    亲切的问候,

    罗杰

    1 回复  |  直到 16 年前
        1
  •  2
  •   Mladen Jablanović    16 年前

    “便携式”是什么意思?是 openssl 足够便携吗?这里有一个 nice article 作者OlaBini讲述了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
    
    推荐文章