LANLIB

Railsでデータベースの値を暗号化

attr_encrypted

データベースの特定のカラムを暗号化することができます。

使用するにはGemfileに

gem 'attr_encrypted'

を追記します。

モデル作成

暗号化するtokenカラムを作りたい場合は

encrypted_tokenカラムと
encrypted_token_ivカラムが必要になります。

class CreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      t.string :name
      t.string :encrypted_token
      t.string :encrypted_token_iv
      t.timestamps
    end
  end
end

モデルファイルに設定を記載

モデルファイルに暗号化するカラムの設定を下記の様に記載します。

class User < ApplicationRecord
  attr_encrypted :token, key: :encrypt_key

  def encrypt_key
    # SecureRandom.random_bytes(32) で生成した値をSettingsか.envから参照する
  end
end

key:に関しては、.envかSettingsから参照する様にすると良いと思います。

データを登録

実際にデータを登録すると下記の様になります。

user = User.new
user.token = 'token'
user.name = 'name'
user.save

user.token
# => 'token' ちゃんと値が取得できる

user.encrypted_token
# => "RDepOiiQzdLr/ngeIOt+JIc3d24D\n"
# encrypted_tokenを取得すると、データベースに保存されている、暗号化されたデータが確認できる