当使用attr_encrypted进行activerecord存储时,我得到nil和Empty

时间:2014-06-17 09:39:27

标签: ruby-on-rails ruby activerecord encryption attr-encrypted

我正在使用https://github.com/attr-encrypted/attr_encrypted 进行我的活动记录的加密 *** ***用户模型***具有以下属性。

 
  activation_hash string  
  details string  
  email string  
  imei string  
  password string  
  registration_id string  
  secure_hash string  

我将这些属性用作

attr_encrypted_options.merge!(:prefix => 'android_', :suffix => '_sheild')  
attr_encrypted :activation_hash, :key => Getter::encryption_key, :encode => true  
attr_encrypted :active, :key => Getter::encryption_key, :encode => true  
attr_encrypted :code, :key => Getter::encryption_key, :encode => true  
attr_encrypted :details, :key => Getter::encryption_key, :encode => true  
attr_encryptor :email, :key => "this is awais"  
attr_encrypted :password, :key => Getter::encryption_key, :encode => true  
attr_encrypted :registration_id, :key => Getter::encryption_key, :encode => true  
attr_encrypted :secure_hash, :key => Getter::encryption_key, :encode => true
attr_encrypted :imei, :key => Getter::encryption_key, :encode => true

如attr_encrypted wiki中所述,但是当我将记录空字符串保存在数据库中时。

在Getter中,我添加了通用加密密钥方法..

    module Getter

      def self.encryption_key
        keys = OpenSSL::Cipher::Cipher.new('aes-256-cbc').random_iv
        return keys
      end
    end

我是否需要添加我在用户模型中添加的加密属性的迁移。 我的目的是加密activerecord数据并将这些字段保存到数据库中,当我检索到i时,可以获得解密记录,但在数据库级别上这些记录无法访问。

你能告诉我我做错了吗?我需要切换宝石吗?

非常感谢您的建议

1 个答案:

答案 0 :(得分:2)

According to the attr_encrypted documentation

  

默认情况下,加密的属性名称已加密_#{attribute}(例如attr_encrypted:email会创建名为encrypted_email的属性)。因此,如果您将加密属性存储在数据库中,则需要确保表中存在加密的_#{attribute}字段。

好像你没有按照预期的格式命名你的字段。