Friday, February 22, 2013

RSA Encryption and Decryption

1. Generate private key (choose your own pass phrase)
openssl genrsa -des3 -out private.pem 2048
Generating RSA private key, 2048 bit long modulus ......................................................................+++ ..............+++
e is 65537 (0x10001)
Enter pass phrase for private.pem:
Verifying - Enter pass phrase for private.pem:

2. Extract public key
openssl rsa -in private.pem -out public.pem -outform PEM -pubout
Enter pass phrase for private.pem:
writing RSA key


3. To encrypt data
require 'openssl'
require 'base64'
plaintext = 'Sentul was here.';
publickey = OpenSSL::PKey::RSA.new(File.read('public.pem'))
cyphertext = Base64.encode64(publickey.public_encrypt(plaintext))
print cyphertext, "\n"
ZXRd/2jJpYEJkQroWcs1QVJIII+yeQWtBPeSilSWqel5l8WcdGg2vwFh4rcf dKXjk54WPn/2jfBkk6TBssHcYr6wbHlzJG9MjqZHAqhWgaVRA9R9fDYkFS6F o0Nqtpp46B4luilKhC6npWS4zlR9vyIJwyp3mLDnbPaB5sUIGluOoRtE1Z7k 3jYAF6Xz9fYCJqVPGHoO7xDALNMEmJqxCHjFttxjAZoiEL84AdT3ZI3FJUmv nxgyuGu9daYpfK+8kVXlW/qqVPKdQmWSOEVlTXzSq9j4pgWvuTk6Jg21b7Hf NHJ515iSBdt5NGPgNCPeB4mNhq3hOkmMwX7HRppf1Q==


4. To decrypt data. The pass phrase is 'sentul asia' as an example. Your cyphertext will definitely differ from the one below.
require 'openssl'
require 'base64'
passphrase = 'sentul asia'
cyphertext = %Q{ ZXRd/2jJpYEJkQroWcs1QVJIII+yeQWtBPeSilSWqel5l8WcdGg2vwFh4rcf dKXjk54WPn/2jfBkk6TBssHcYr6wbHlzJG9MjqZHAqhWgaVRA9R9fDYkFS6F o0Nqtpp46B4luilKhC6npWS4zlR9vyIJwyp3mLDnbPaB5sUIGluOoRtE1Z7k 3jYAF6Xz9fYCJqVPGHoO7xDALNMEmJqxCHjFttxjAZoiEL84AdT3ZI3FJUmv nxgyuGu9daYpfK+8kVXlW/qqVPKdQmWSOEVlTXzSq9j4pgWvuTk6Jg21b7Hf NHJ515iSBdt5NGPgNCPeB4mNhq3hOkmMwX7HRppf1Q== }
privatekey = OpenSSL::PKey::RSA.new(File.read('private.pem'),passphrase)
plaintext = privatekey.private_decrypt(Base64.decode64(cyphertext))
print plaintext"
Sentul was here.

No comments:

Post a Comment