Brian Candler
8/3/2007 1:04:00 PM
On Fri, Aug 03, 2007 at 01:46:56PM +0100, Brian Candler wrote:
> I know how to use public key to encrypt data if I create public/private
> > key pair by myself through OpenSSL::PKey::RSA. However, if I only know
> > other guy's public key, how could I encrypt data with his/her public
> > key? Is there any method in the module OpenSSL::PKey::RSA to support it?
>
> What's your current code? You should just be able to read in the public key
> (e.g. from a PEM file), and use that to encrypt.
Try this:
$ openssl genrsa -out key.priv -des3 -passout pass:abcd 2048
Generating RSA private key, 2048 bit long modulus
.....................................................................+++
...................+++
unable to write 'random state'
e is 65537 (0x10001)
$ openssl rsa -in key.priv -passin pass:abcd -out key.pub -pubout
writing RSA key
$ cat enc.rb
require 'openssl'
key = OpenSSL::PKey::RSA.new(File.read('key.pub'))
raise "Not public key" unless key.public?
$stdout.write key.public_encrypt($stdin.read)
$ echo "Hello, world" | ruby enc.rb >data.bin
$ ls -l data.bin
-rw-r--r-- 1 candlerb candlerb 256 2007-08-03 14:00 data.bin
$ openssl rsautl -decrypt -in data.bin -inkey key.priv -passin pass:abcd
Hello, world