我想使用Ruby和 Crypt库对一些纯文本进行编码。我想将此加密文本(以及一些其他数据)作为XML十六进制字符串传输到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()但是我不确定解包方法调用需要什么参数。

有帮助吗?

解决方案

当您说“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.encrypt_string(plain)
p blowfish.decrypt_string(enc)

此外,还发现了一篇关于使用Crypt库谈论速度问题的博客文章,仅供参考。 :)
http://basic70tech.wordpress.com/2007/03/09/blowfish-decryption-in-红宝石/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top