Como posso converter um Blowfish codificado seqüência de binário para ASCII em Ruby?
-
03-07-2019 - |
Pergunta
Gostaria de codificar algum texto sem formatação usando Ruby e a Crypt biblioteca . Gostaria de, em seguida, transmitir este texto criptografado (junto com alguns outros dados) como uma string ASCII hexadecimal dentro de um arquivo XML.
Eu tenho o seguinte trecho de código:
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
Que resultados:
This is the plain text ????;
Eu acredito que eu preciso enc.unpack()
chamada, mas eu não tenho certeza do que parâmetros são necessários para a chamada de método de descompactação.
Solução
Quando você diz "hexadecimal ASCII" você quer dizer que apenas precisa de ser ASCII legível ou faz isso precisa ser estritamente hexadecimal?
Aqui está duas abordagens para codificação de dados binários:
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=
Outras dicas
Se você usar decrypt_string
e sua contraparte encrypt_string
ele gera-lo muito facilmente. :)
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)
Também encontrado este blogpost que fala sobre as preocupações de velocidade usando a biblioteca Crypt, adicionados apenas para referência. :)
http://basic70tech.wordpress.com/2007/03/09/blowfish-decryption-in- rubi /