Шифрование с парой ключей RSA (Ruby)
key.rb
Code (ruby)
-
-
require ‘openssl’
-
-
module Crypto
-
-
def self.create_keys(priv = "rsa_key", pub = "#{priv}.pub", bits = 1024)
-
private_key = OpenSSL::PKey::RSA.new(bits)
-
File.open(priv, "w+") { |fp| fp << private_key.to_s }
-
File.open(pub, "w+") { |fp| fp << private_key.public_key.to_s }
-
private_key
-
end
-
-
class Key
-
def initialize(data)
-
@public = (data =~ /^—–BEGIN (RSA|DSA) PRIVATE KEY—–$/).nil?
-
@key = OpenSSL::PKey::RSA.new(data)
-
end
-
-
def self.from_file(filename)
-
self.new File.read( filename )
-
end
-
-
def encrypt(text)
-
Base64.encode64(@key.send("#{key_type}_encrypt", text))
-
end
-
-
def decrypt(text)
-
@key.send("#{key_type}_decrypt", Base64.decode64(text))
-
end
-
-
def private? !@public end
-
-
def public? @public end
-
-
def key_type
-
@public ? :public : :private
-
end
-
end
-
end
-
использование
Code (ruby)
-
-
require ‘key’
-
-
Crypto.create_keys # creates rsa_key and rsa_key.pub
-
-
priv_key = Crypto::Key.from_file(‘rsa_key’)
-
pub_key = Crypto::Key.from_file(‘rsa_key.pub‘)
-
-
text = "I was encrypted but came back!"
-
-
secret = pub_key.encrypt(text)
-
puts priv_key.decrypt(secret) #=>
-
"I was encrypted but came back!"
-
