我已经成功地在Mongo和Mongoid中使用attr_encrypted。只需要进行一些微调。
确保模型中显式创建了由attr_encrypted自动创建的所有加密字段。例如,如果您有:
attr_encrypted :email, :key => 'blah blah blah', :encode => true
你需要拥有:
field :email, :type => String
field :encrypted_email, :type => String
同时注意需要告诉它对加密后的字符串进行编码,否则Mongo将会大声抱怨。
最后,如果你要加密一个哈希值,请这样做:
field :raw_auth_hash, :type => Hash
field :encrypted_raw_auth_hash, :type => String
attr_encrypted :raw_auth_hash, :key => 'blah', :marshal => true, :encode => true
field :ssn, type: Mongoid::EncryptedString
那么您可以像平常一样访问它,但数据会被加密存储。
http://ezcrypto.rubyforge.org/
目前使用ezcrypto gem与postgreSQL - 相当好用,尽管在使用加密字段的模型之间的关联时存在一些限制(这可能是由于我无法找到此项目的正确最新分支)。
加密字段以BYTEA数据类型存储在postgreSQL数据库中,通常需要转义单引号(这是插件的另一个问题),
PostgreSQL还可以访问其自己的加密/解密模块'pgcrypto',它也返回BYTEA数据类型。不确定如何将其与Rails activerecord和模型之间的关联集成(可能效果不佳:D)。
我在一个应用程序中使用Mongoid Ruby适配器来使用MongoDB。Rails的半神Ryan Bates最近在这个问题上制作了一部非常出色的railscast http://railscasts.com/episodes/250-authentication-from-scratch。
我在一个MongoDB应用程序中使用它,它可以完美地加密数据。他的教程视频主要是为了加密密码,但你可以将其适应于任何其他字段值。
我也已经成功地使用attr_encrypted,但我不确定它是否适用于MongoDB;只在ActiveRecord中使用过。