views:

643

answers:

2

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.

A: 

If you use decrypt_string and its counterpart encrypt_string it outputs it pretty easily. :)


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)
p blowfish.decrypt_string(enc)

Also found this blogpost that talks about speed concerns using the Crypt library, added just for reference. :)
http://basic70tech.wordpress.com/2007/03/09/blowfish-decryption-in-ruby/

ba
That'll recover the plaintext and output it, the question is, I believe, requesting how to take the buffer containing the ciphertext and output it.
animal
That's right holychao. The string that is generated by blowfish.encrypt_string() contains control characters. I want to further convert this string to readable ASCII.
mlambie
I clearly missunderstood the purpose above, looking at the Crypt source it seems they are using N as a parameter to pack/unpack to get the correct values.But using N just creates a BigNum and then I can't convert that easily to hex. But using the code below I can send the encrypted string across different instances.<pre><code>tmp = env.unpack('N*')p blowfish.decrypt_string(tmp.pack('N*'))</code></pre>Not sure if this is any helpful at all, but good luck! :)
ba
A: 
tadman