Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
10
Help us understand the problem. What is going on with this article?
@terufumi1122

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

More than 1 year has passed since last update.

はじめに

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

10
Help us understand the problem. What is going on with this article?
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
terufumi1122
ストックついでに「いいね!」もしてもらえると嬉しいです。 HTML/CSS/JavaScript/Vue.js/Ruby/Ruby on Rails/Java/Kotlin/Android

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
10
Help us understand the problem. What is going on with this article?