rubyopensslprivate-keyruby-2.1

ruby convert string private key back to openssl class for encryption


I have a situation where the private key is stored as a string in the database.

> private_key
> => "-----BEGIN RSA PRIVATE KEY-----\nMIIEpk9KuPZrNC+pvJzohwXAwJwC8kIZaidMsKbOmyAz\nZBXKkUZ+gxDu4bd7InKwvjhufmnby0X+XcoPDfn/AoGAViYhxIGcQkVnvSzmdXQS\ngAgyl9LLB8MIM+q31Aflv0Vg31qjzxBb1p6Am+TwSE5rl+IWULlUAGPNAp5OLztb\nHY4DVNyfRspd5LiOoVhsqCVitFcV0\nSwZFd4EmgDlWgZ6F0Dkv/RdIzWcQNOqwQm9OXoEl30D7cbHbbDbncGNJ4oPHaNta\no3mNu4MCgYB47e229eaJIaVOTkzY2arqiq8hVbIIrqHv8bRtK93TbCM8APow7Hrd\nlUac3SGmlDbFZ486O7PfT2bblf2u4xpcvKPN6ApHpdegoN1eCwqthWnXCMETbWaM\nqavVjCaqGFSYOnCxqoiURtiQkW+u3FJaMi4joZqhU34vAnV9mn9G9w==\n-----END
> RSA PRIVATE KEY-----\n

"

How do i convert to OpenSSL:Pkey class.

#<OpenSSL::PKey::RSA:0x007fd98c80bc28>

The reason I want to do this so that I can encrypt it as follows.

cipher = OpenSSL::Cipher.new 'DES-EDE3-CBC'

key_secure = key.export cipher, pass_phrase

Since it is a string I get this error:

undefined method `export' for #<String:0x007fdb832f6b40>

Solution

  • How do i convert to OpenSSL:Pkey class

    require 'openssl'
    
    key = OpenSSL::PKey::RSA.generate(1024, 3)
    encoded_str = key.to_s  #This is your string
    puts encoded_str
    
    puts '*' * 30
    
    key = OpenSSL::PKey::RSA.new encoded_str
    puts key.to_s  #Should be the same as your string
    
    puts '*' * 30
    
    cipher = OpenSSL::Cipher.new 'DES-EDE3-CBC'
    pass_phrase = "hello world"
    pem_encoded_str = key.export cipher, pass_phrase
    puts pem_encoded_str
    
    
    --output:--
    -----BEGIN RSA PRIVATE KEY-----
    MIICWwIBAAKBgQCtyWCVI8dkpH9ol9q3Ve5GUpOCvrMZWKIiMTOSn6WsQQOZU1Lw
    Xb2hBjiSWA2bh1REPaW/+OwGfxHruPv80/J/4vwpezPagprcUSOdfi1coD+X4Cdd
    Sd4Y81i11kjlHLVNVYtU8eDS5D8LeotIuG4Lq65HoNrHZC7DCygvBmu1cwIBAwKB
    gHPblbjChO3C/5sP5yTj9C7ht6x/IhDlwWwgzQxqbnLWAmY3jKA+fmtZeww6s70E
    4tgpGSql8q7/YUfQp/3ioal9EhShxMj4GlgcBxBC9RCsQd7AhF/iOVD0ZihTJib1
    1A1M46jp1GagybKO+bRao/eMHr6S6pWjNHdZAxAatqDbAkEA5an7qRz3MBNJespJ
    p83dYqbO2uZxjMTT24+KWjJfS7bbH3Kr9vEeZHkbptjSasjk1Gf86UNE4oC6LuBU
    mSco/QJBAMG3Dt9vtd5gDqxOu3Hv5js1+uR6W+nDS6kv7v9dS2BAXkLDK5wxGo6X
    Y/0758WvM4UYLNs3ogzfVdbDQkUymy8CQQCZG/0baKTKt4ZR3DEaiT5BxInnREuz
    LeKSX7GRduoyeedqTHKkoL7tphJvOzbx20M4RVNGLNiXAHwfQDhmGhtTAkEAgSS0
    lPUj6ZVfHYnSS/VEJ3lR7abn8SzdG3VJ/5OHlYA+1yzHvXYRtGTtU31FLnTNA2Vz
    PM/BXeo5OdeBg3cSHwJAcrIdUXxPfk21dDymgmTMkj4EsLhaO6/5nGpElt2JNQ8S
    tfgUq8Z2b5XXtm6QJRxAoMYFvfxMfkH93ChpHQjVVg==
    -----END RSA PRIVATE KEY-----
    ******************************
    -----BEGIN RSA PRIVATE KEY-----
    MIICWwIBAAKBgQCtyWCVI8dkpH9ol9q3Ve5GUpOCvrMZWKIiMTOSn6WsQQOZU1Lw
    Xb2hBjiSWA2bh1REPaW/+OwGfxHruPv80/J/4vwpezPagprcUSOdfi1coD+X4Cdd
    Sd4Y81i11kjlHLVNVYtU8eDS5D8LeotIuG4Lq65HoNrHZC7DCygvBmu1cwIBAwKB
    gHPblbjChO3C/5sP5yTj9C7ht6x/IhDlwWwgzQxqbnLWAmY3jKA+fmtZeww6s70E
    4tgpGSql8q7/YUfQp/3ioal9EhShxMj4GlgcBxBC9RCsQd7AhF/iOVD0ZihTJib1
    1A1M46jp1GagybKO+bRao/eMHr6S6pWjNHdZAxAatqDbAkEA5an7qRz3MBNJespJ
    p83dYqbO2uZxjMTT24+KWjJfS7bbH3Kr9vEeZHkbptjSasjk1Gf86UNE4oC6LuBU
    mSco/QJBAMG3Dt9vtd5gDqxOu3Hv5js1+uR6W+nDS6kv7v9dS2BAXkLDK5wxGo6X
    Y/0758WvM4UYLNs3ogzfVdbDQkUymy8CQQCZG/0baKTKt4ZR3DEaiT5BxInnREuz
    LeKSX7GRduoyeedqTHKkoL7tphJvOzbx20M4RVNGLNiXAHwfQDhmGhtTAkEAgSS0
    lPUj6ZVfHYnSS/VEJ3lR7abn8SzdG3VJ/5OHlYA+1yzHvXYRtGTtU31FLnTNA2Vz
    PM/BXeo5OdeBg3cSHwJAcrIdUXxPfk21dDymgmTMkj4EsLhaO6/5nGpElt2JNQ8S
    tfgUq8Z2b5XXtm6QJRxAoMYFvfxMfkH93ChpHQjVVg==
    -----END RSA PRIVATE KEY-----
    ******************************
    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,73C71A1D7325EAAF
    
    2sKeayKdmnDxHyYs35ydnt/ZRUUzgVvVl4c9ohxZWurHQwQDNAZ7j1WE+/JNo44y
    dlY9LPW2PfT4fw5yC/k0uN1YPTgtOBKL9jpKfI8pcpea2fyAJzDXu8bdvWiWDnF2
    9pjO/ghe1pZNdfU+yGkweIr6qQH4b6piWPtvf0VBBQnjqq7OqFDYYp1eXVal27+B
    VaZLYk1nWDInUPE7bEEHY5VZLVRNg/wCQ0qPoCDbBXb3cyss9pg7ysrNNi6Fa0Yq
    Z00GYK1yENDnH4mJj9VzDAC1yV8592SdW1qDzDR0QCtQ5BenWunAS61R7wyLkS0L
    vCahavVGW9etAcwXUy12qysNz8MnnGT75/aTqMx6Eu1oj7Lu4orQlz7qNcb7Mtwe
    5tLCRW59PT57K52KSJNjKJpAUrSZ9kJCwt9Mk+zAiRkIg48DztuF0STJ1U0qAN9V
    s61tVHJAPWl9Th7xxGt6pfLErOpikqcte6tFnaMcBRqzeCVXcQfDLMY/RZJgW+34
    CM54FyRH8cGDiajSnpGMsCNM3y41Mk+02yrwVA4jOvXq4yrCjCghL8SnZ9FkTTuh
    6+Uuc2B2DFVbiOwDRCgaIo9jLgEu4Et400QQMnllE9RxDlFIgnCoXP8A9fhNRZu5
    zuH+1K7NpKxqLIqldZdiPKLsXS/rE7CFi/u1RVcHidCnpKR2aPO47ntpLUK9jcHY
    ZRpa0hoNY/5mkMgth5qJL6bD6YDkE+6Spsdpxq2f11HK9IuyiTvIav2BVHbIrXcM
    voMhuSWVW9RPphY9rVxesZWmHN0VPBwwVqNg5KnbLv4=
    -----END RSA PRIVATE KEY-----