0

我想使用 Ruby 和Crypt library对一些纯文本进行编码。然后,我想将此加密文本(连同其他一些数据)作为 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

哪个输出:

这是纯文本
????;

我相信我需要调用enc.unpack(),但我不确定 unpack 方法调用需要哪些参数。

4

2 回答 2

0

如果你使用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.encrypt_string(plain)
p blowfish.decrypt_string(enc)

还发现这篇博文讨论了使用 Crypt 库的速度问题,添加仅供参考。:)
http://basic70tech.wordpress.com/2007/03/09/blowfish-decryption-in-ruby/

于 2009-04-30T19:20:46.273 回答
0

当您说“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=
于 2009-05-01T15:30:20.937 回答