Skip to content

Instantly share code, notes, and snippets.

@mryoshio
Last active October 24, 2018 01:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mryoshio/d3014026813c10be0101666272a032ea to your computer and use it in GitHub Desktop.
Save mryoshio/d3014026813c10be0101666272a032ea to your computer and use it in GitHub Desktop.
RSA encryption/decryption
require 'base64'
require 'openssl'
def enc(der, msg)
rsa = OpenSSL::PKey::RSA.new(der)
rsa.private_encrypt(msg)
end
def dec(der, msg)
rsa = OpenSSL::PKey::RSA.new(der)
rsa.public_decrypt(msg)
end
OpenSSL::Random.seed(File.read("/dev/random", 16))
msg = 'hello world'
puts '## original'
puts msg
rsa = OpenSSL::PKey::RSA.generate(2048) # initialize
der = Base64.strict_encode64(rsa.to_der) # store this in DB
puts '## public key'
puts rsa.public_key
puts '## public key (base64 encoded)'
puts Base64.strict_encode64(rsa.public_key.to_text)
decoded_der = Base64.strict_decode64(der)
enc_msg = Base64.strict_encode64(enc(decoded_der, msg))
puts '## encrypted'
puts enc_msg
decrypted = dec(decoded_der, Base64.strict_decode64(enc_msg))
puts '## decrypted'
puts decrypted
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment