0

我正在构建一个 Rails 应用程序,在其中将哈希序列化为 JSON,然后使用 gem crypt19 和河豚算法对哈希进行编码。我正在使用 Rails 3.0.9、Ruby 1.9.2 p180、最新的 crypt19 v1.2.1,我正在 Windows7 上开发。在我的 Rails 控制器中,我这样做:

require 'crypt/blowfish'
h=Hash.new
h["thing"]="12345"
h["thang"]="abcdefghijklmnopqrstuvwxyz"

blowfish=Crypt::Blowfish.new("SECRET")

encrypted_thingy=blowfish.encrypt_string(h.to_json)

我将 encrypted_thingy 分配给模型中的一个值(这是一个字符串),

@my_model.string_thing=encrypted_thingy
@my_model.save

但是当我保存模型时,它会在保存模型的位置引发参数错误异常。

invalid byte sequence in US-ASCII

(当我为它分配一个普通的旧字符串 @my_model="xxxxxxxx" 时,一切正常。

我最终的计划是通过模型将 encrypted_thingy 存储在数据库中,然后对其进行解密,解析出 JSON,并获取“thing”和“thang”的值。

搜索 'net 建议我需要更改编码,但不清楚我如何使用 crypt19/blowfish 编码的结果来做到这一点。

有没有办法像我存储的任何其他字符串一样将此加密字符串存储为字符串?

或者有没有办法应用一些魔法(以及可逆魔法)将那个时髦的字符串变成我可以在电子邮件中传递的真实字符串?

4

1 回答 1

2

我能够让它工作。有一个名为“hex_string”的 gem,它将具有奇怪编码的二进制内容转换为字节字符串。

首先我必须做

gem install hex_string

然后代码看起来像这样

require 'crypt/blowfish'
require 'hex_string'
h=Hash.new
h["thing"]="12345"
h["thang"]="abcdefghijklmnopqrstuvwxyz"

blowfish=Crypt::Blowfish.new("SECRET")

encrypted_thingy=blowfish.encrypt_string(h.to_json).to_hex_string.split(" ").join

“encrypted_thingy”现在是一个字符串,我可以在我的网络应用程序中轻松传递它,存储在数据库中,调试等,而无需担心字符编码等。

为了扭转这个过程,我这样做了:

decrypted_string= blowfish.decrypt_string(encrypted_thingy.to_byte_string)

然后可以对解密的字符串进行 JSON 解析,以提取原始哈希中的数据。

于 2011-08-05T13:54:41.503 回答