0

ハッシュをJSONにシリアル化し、gemcrypt19とblowfishアルゴリズムを使用してハッシュをエンコードするRailsアプリを構築しています。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」の値を取得することです。

'ネットを検索すると、エンコーディングを変更する必要があることがわかりましたが、crypt19/blowfishエンコーディングの結果でそれをどのように行うかは明確ではありません。

この暗号化された文字列を、私が保存する他の文字列と同じように文字列として保存する方法はありますか?

または、(リバーシブルマジックとともに)魔法を適用して、そのファンキーな文字列を、電子メールで渡すことができる実際の文字列に変換する方法はありますか?

4

1 に答える 1

2

私はそれを機能させることができました。奇妙なエンコーディングを持つバイナリっぽいものをバイト文字列に変換する「hex_string」と呼ばれる宝石があります。

最初にやらなければならなかった

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」は、文字エンコードなどを気にせずに、Webアプリで簡単に渡したり、データベースに保存したり、デバッグしたりできる文字列になりました。

プロセスを逆にするために、私はこれを行いました:

decrypted_string= blowfish.decrypt_string(encrypted_thingy.to_byte_string)

次に、復号化された文字列をJSON解析して、元のハッシュのデータを抽出できます。

于 2011-08-05T13:54:41.503 に答える