Comment convertir une chaîne binaire encodée par Blowfish en ASCII en Ruby?
-
03-07-2019 - |
Question
J'aimerais encoder du texte brut à l'aide de Ruby et de la bibliothèque de cryptage . Je voudrais ensuite transmettre ce texte crypté (avec quelques autres données) sous forme de chaîne hexadécimale ASCII dans un fichier XML.
J'ai l'extrait de code suivant:
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
Quelles sorties:
This is the plain text ????;
Je crois que j'ai besoin d'appeler enc.unpack ()
mais je ne suis pas sûr des paramètres requis pour l'appel de la méthode de décompression.
La solution
Lorsque vous dites "hexadécimal ASCII" voulez-vous dire qu'il doit simplement être lisible en ASCII ou doit-il être strictement hexadécimal?
Voici deux approches pour coder des données binaires:
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=
Autres conseils
Si vous utilisez decrypt_string
et son homologue encrypt_string
, il le sort assez facilement. :)
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)
Nous avons également trouvé cet article de blog qui traite de problèmes de rapidité d'utilisation de la bibliothèque Crypt, ajouté juste pour référence. :)
http://basic70tech.wordpress.com/2007/03/09/blowfish-decryption-in- rubis /