2

以下のattr_encryptedを使用して、テーブル/モデル-RegisteredDomainの値を暗号化しています

attr_encrypted :domain_name, :registered_by, :api_key, :key => "65xU4TdZntTV53"

値は暗号化され、db にも保存されます。以下のコードは、値を db に保存します。

registereddomain = RegisteredDomain.new(
        :domain_name => domain_name,
        :api_key =>  api_key,
        :hash_key => hash_key,
        :registered_by => ep_id,
        :status =>  status,
        :domain_type_id => domain_type_id              
        )
registereddomain.save

問題は、以下の選択で値を復号化することです。ここで暗号化された値を取得します。リストで復号化された値を取得する方法を誰か教えてください。

def select_all
  @registered_domains = RegisteredDomain.select("id, encrypted_domain_name, domain_type_id, encrypted_api_key, status").order(updated_at: :desc)
  return @registered_domains
end
4

2 に答える 2

0

コントローラーとビュー用のサンプルコードも提供できれば幸いです。私が見ているように、attributeオプションなしでフィールドを直接使用しています。したがって、データベースでは、フィールドdomain_nameは として表す必要がありencrypted_domain_nameます。encrypted_domain_nameしたがって、ここで選択クエリで、属性をに変更してみることができますdomain_name。また、暗号化された属性を取得したい場合はいつでも変更する必要があります。(完全なコード ブロックを適切に記述することができないため、簡単に説明しようとしましたが、属性の名前を変更するだけでうまくいくはずです!)

于 2015-12-04T09:01:52.990 に答える
0

データベースに値を暗号化モードで保存する理由があると考えられます。したがって、値を復号化したい場合は、インスタンス メソッドで適切なメソッドを呼び出すだけです。

@registered_domains = RegisteredDomain.select("id, encrypted_domain_name, domain_type_id, encrypted_api_key, status").order(updated_at: :desc)
@registered_domains.first.domain_name

編集

データベースから値を取得するためのカスタム メソッドを作成する必要がある場合があります。

def self.all_decrypted(columns)
  all.map do |record|
    columns.map do |column|
      record.send(column.to_sym)
    end
  end
end

RegisteredDomain.all_decrypted([:domain_name, :api_key]) これにより、配列の配列、 の実際の値が返されdomain_nameますapi_key

于 2015-10-26T11:04:37.953 に答える