Поиграть


Фотографии знаменитостей, Герои нашего времени

Шифрование с парой ключей RSA (Ruby)

key.rb

Code (ruby)
  1.  
  2. require ‘openssl’
  3.  
  4. module Crypto
  5.  
  6.   def self.create_keys(priv = "rsa_key", pub = "#{priv}.pub", bits = 1024)
  7.     private_key = OpenSSL::PKey::RSA.new(bits)
  8.     File.open(priv, "w+") { |fp| fp << private_key.to_s }
  9.     File.open(pub,  "w+") { |fp| fp << private_key.public_key.to_s }   
  10.     private_key
  11.   end
  12.  
  13.   class Key
  14.     def initialize(data)
  15.       @public = (data =~ /^—–BEGIN (RSA|DSA) PRIVATE KEY—–$/).nil?
  16.       @key = OpenSSL::PKey::RSA.new(data)
  17.     end
  18.  
  19.     def self.from_file(filename)   
  20.       self.new File.read( filename )
  21.     end
  22.  
  23.     def encrypt(text)
  24.       Base64.encode64(@key.send("#{key_type}_encrypt", text))
  25.     end
  26.    
  27.     def decrypt(text)
  28.       @key.send("#{key_type}_decrypt", Base64.decode64(text))
  29.     end
  30.  
  31.     def private?  !@public  end
  32.  
  33.     def public?   @public   end
  34.    
  35.     def key_type
  36.       @public ? :public : :private
  37.     end
  38.   end
  39. end
  40.  

использование

Code (ruby)
  1.  
  2.  require ‘key’
  3.  
  4.     Crypto.create_keys # creates rsa_key and rsa_key.pub
  5.  
  6.     priv_key = Crypto::Key.from_file(‘rsa_key’)
  7.     pub_key =  Crypto::Key.from_file(‘rsa_key.pub)
  8.  
  9.     text = "I was encrypted but came back!"
  10.  
  11.     secret = pub_key.encrypt(text)
  12.     puts priv_key.decrypt(secret) #=>
  13.             "I was encrypted but came back!"
  14.  

+1+2+3+4+5 (Ещё не голосовали)
Загрузка... Загрузка...

Оставьте комментарий

Блог разработчика / Love cooking? Check out easy recipe at eFoodDepot.com
рыбалка, охота Воронеж - для тусы
Лучшие Заставки от ScreenSavers.RU
Дизайн-студия Taste&Color – создание логотипов