Как я могу преобразовать двоичную строку в кодировке Blowfish в ASCII в Ruby? - PullRequest
0 голосов
/ 30 апреля 2009

Я хотел бы закодировать какой-нибудь простой текст, используя Ruby и библиотеку Crypt . Затем я хотел бы передать этот зашифрованный текст (вместе с некоторыми другими данными) в виде шестнадцатеричной строки ASCII в файле XML.

У меня есть следующий фрагмент кода:

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

Какие выходы:

This is the plain text
????;

Я считаю, что мне нужно вызвать enc.unpack(), но я не уверен, какие параметры требуются для вызова метода распаковки.

Ответы [ 2 ]

0 голосов
/ 01 мая 2009

Когда вы говорите «шестнадцатеричный ASCII», вы имеете в виду, что он просто должен быть читаемым ASCII или строго шестнадцатеричным?

Вот два подхода к кодированию двоичных данных:

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=
0 голосов
/ 30 апреля 2009

Если вы используете decrypt_string и его аналог encrypt_string, он выводит его довольно легко. :)


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.<strong>encrypt_string</strong>(plain)
p blowfish.<strong>decrypt_string</strong>(enc)

Также нашел этот пост, который рассказывает о проблемах скорости, используя библиотеку Crypt, добавлен только для справки. :)
http://basic70tech.wordpress.com/2007/03/09/blowfish-decryption-in-ruby/

...