Как я могу преобразовать двоичную строку в кодировке Blowfish в ASCII в Ruby?
-
03-07-2019 - |
Вопрос
Я хотел бы закодировать некоторый обычный текст, используя Ruby и Библиотека - склеп.Затем я хотел бы передать этот зашифрованный текст (вместе с некоторыми другими данными) в виде шестнадцатеричной строки 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()
но я не уверен, какие параметры требуются для вызова метода unpack.
Решение
Когда вы говорите "шестнадцатеричный 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=
Другие советы
Если вы используете 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.зашифровываемая строка(plain)
p blowfish.расшифровываемая строка(enc)
Также нашел этот пост в блоге, в котором говорится о проблемах со скоростью использования библиотеки Crypt, добавленный просто для справки.:)
http://basic70tech.wordpress.com/2007/03/09/blowfish-decryption-in-ruby/