Help us understand the problem. What is going on with this article?

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

はじめに

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away