LoginSignup
15
10

More than 3 years have passed since last update.

【Rails】簡単に使える暗号化gem`attr-encrypted`を使ってみた

Posted at

はじめに

Railsアプリにおいて、ログインパスワードはbcryptを使ってUserモデルにhas_secure_passwordと記載すれば簡単に暗号化出来ます。

でも、それ以外にもトークンなどそのまま保管したくない情報が出たときどう処理するんだろう?と疑問が発生。

そこで調べたところ、attr-encryptedという便利なgemがあったので使い方をまとめました。

こちらが公式のREADMEです。

この記事が役に立つ方

  • 暗号化はbcrypthas_secure_passwordしか使ったことがない方

この記事のメリット

  • attr-encryptedを使って簡単に暗号化が出来るようになる

環境

macOS Catalina 10.15.1
zsh: 5.7.1
Ruby: 2.6.5
Rails: 5.2.4 

前提・目的

  • 今回暗号化したいデータのカラム名hoge
  • 既存Usersテーブルにhogeを暗号化して追加したい

インストール方法

Gemfile
gem "attr_encrypted"
bundle install

シンプルです。

使い方

1.マイグレーションファイルを作成

rails g migration AddAttrEncryptedToUsers

2.マイグレーションファイルを編集

db/migrate/XXXXXXXXXXXXXX_add_attr_encrypted_to_users
class AddAttrEncryptedToUsers < ActiveRecord::Migration[5.2]
  def change
    add_column :users, :encrypted_hoge, :string
    add_column :users, :encrypted_hoge_iv, :string
  end
end

encrypted_カラム名
encrypted_カラム名_iv
のように設定します。

3.db:migrate

rails db:migrate

4.Userモデルを編集

class User
  attr_encrypted :hoge, key: 'This is a key that is 256 bits!!'
end

attr_encryptesの後に暗号化したいカラム名を記載します。

5.rails s

rails s

サーバーは再起動しておきます。

これで準備は完了です。

動作確認

rails consoleで確認します。

user = User.new
=> #<User:XXXXXXXXXXXXXXXXX id: nil, created_at: nil, updated_at: nil, encrypted_hoge: nil, encrypted_hoge_iv: nil>

user.hoge = "foobar"
=> "foobar"

user
=> #<User:0x000055904fb92870
 id: nil,
 created_at: nil,
 updated_at: nil,
 encrypted_hoge: "暗号化された文字列",
 encrypted_hoge_iv: "暗号化された文字列">

user.hoge
=> "foobar"

hogeカラムはUsersテーブル上には存在しませんが、無事に暗号化されていて、呼び出しも出来ることが確認できました:v:

補足:生Rubyでの使用方法もREADMEに記載あり

READMEのUsageにはこんな風に書いてあります。

If you're using an ORM like ActiveRecord, DataMapper, or Sequel, using attr_encrypted is easy:

ActiveRecordとかDataMapperとかSequelみたいなORM(Object-relational mapping)を使うなら簡単に使えるよ!とのこと。

Railsアプリケーションであれば、普通ActiveRecordを使用していると思いますので、今回はこのパターンのみ記載しました。

他にPORO(Plain Old Ruby Object:生Ruby)向けの使い方も掲載されていますので、ご興味のある方はREADMEをご覧ください。

おわりに

最後まで読んで頂きありがとうございました:bow_tone1:

こんなに簡単に使えると、かえって「ホントに大丈夫なの?」と考えてしまいますが、実際どうなんでしょう?:thinking:

参考にさせて頂いたサイト(いつもありがとうございます)

GitHub - attr-encrypted/attr_encrypted: Generates attr_accessors that encrypt and decrypt attributes

15
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
10