Search code examples
rubyencryptionblowfish

How can I convert a Blowfish encoded binary string to ASCII in Ruby?


I would like to encode some plain text using Ruby and the Crypt library. I would like to then transmit this encrypted text (along with some other data) as an ASCII hexadecimal string within an XML file.

I have the following code snippet:

require 'rubygems'
require 'crypt/blowfish'

plain = "This is the plain text"
puts plain

blowfish = Crypt::Blowfish.new("A key up to 56 bytes long")
enc = blowfish.encrypt_block(plain)
puts enc

Which outputs:

This is the plain text
????;

I believe I need to call enc.unpack() but I'm not sure what parameters are required to the unpack method call.


Solution

  • When you say "ASCII hexadecimal" do you mean that it merely needs to be readable ASCII or does it need to be strictly hexadecimal?

    Here's two approaches to encoding binary data:

    require 'rubygems'
    require 'crypt/blowfish'
    
    plain = "This is the plain text"
    puts plain
    
    blowfish = Crypt::Blowfish.new("A key up to 56 bytes long")
    enc = blowfish.encrypt_string(plain)
    
    hexed = ''
    enc.each_byte { |c| hexed << '%02x' % c }
    
    puts hexed
    # => 9162f6c33729edd44f5d034fb933ec38e774460ccbcf4d451abf4a8ead32b32a
    
    require 'base64'
    
    mimed = Base64.encode64(enc)
    
    puts mimed
    # => kWL2wzcp7dRPXQNPuTPsOOd0RgzLz01FGr9Kjq0ysyo=