blog.kotamiyake.me

為せば成る、為さねば成らぬ何事も

給与などの機密性の高い情報を保存する際に、データを暗号化する必要があります。

そこでrailsで暗号化する方法について勉強しました。

そもそも暗号化にも2種類あり、一つは可逆暗号化、もう一つは不可逆暗号化です。

その名前が示す通り、可逆であれば暗号化、復号化ができますが、不可逆であれば復号化することができない(または難しい)暗号方式です。

今回は暗号化した給与を再度復号化して使用できる必要があるので、可逆暗号化を採用します。

Railsでデータを可逆暗号で保存する – Qiitaを参考に数値を暗号化してみました。

pry(main)> salery = 10000
=> 10000

pry(main)> secret = SecureRandom.hex(128)
=> "45a38d86c8fefd22fe45a699fc5067d5725fd76a62f62dec456e8163c68d34070960498b3389b991d154d3747e572ef334a5b4c621863719b6534fee0d1385c9057e24f72f6f16fa23669c514d90157ee61e600d3ed17c9d5243e500fecc97559a7719103a21fef52430391d3472a7fdb5d414c64d23e9c6585ba0faf40cc6d4"

pry(main)> encryptor = ::ActiveSupport::MessageEncryptor.new(secret)
=> #<ActiveSupport::MessageEncryptor:0x007fa51018f198
 @cipher="aes-256-cbc",
 @secret=
  "45a38d86c8fefd22fe45a699fc5067d5725fd76a62f62dec456e8163c68d34070960498b3389b991d154d3747e572ef334a5b4c621863719b6534fee0d1385c9057e24f72f6f16fa23669c514d90157ee61e600d3ed17c9d5243e500fecc97559a7719103a21fef52430391d3472a7fdb5d414c64d23e9c6585ba0faf40cc6d4",
 @serializer=Marshal,
 @sign_secret=nil,
 @verifier=
  #<ActiveSupport::MessageVerifier:0x007fa51018efe0
   @digest="SHA1",
   @secret=
    "45a38d86c8fefd22fe45a699fc5067d5725fd76a62f62dec456e8163c68d34070960498b3389b991d154d3747e572ef334a5b4c621863719b6534fee0d1385c9057e24f72f6f16fa23669c514d90157ee61e600d3ed17c9d5243e500fecc97559a7719103a21fef52430391d3472a7fdb5d414c64d23e9c6585ba0faf40cc6d4",
   @serializer=ActiveSupport::MessageEncryptor::NullSerializer>>

# 暗号化
pry(main)> encrypt_salery = encryptor.encrypt_and_sign(salery)
=> "VjluWVpTWDlyZGhjSG5Qa010R3pGdz09LS03WnFtaldELzJ0bmRDYXU0Y3Z2bTBBPT0=--7a581d06340ff60294a66f47db4bfaa75c480482"

# 復号化
pry(main)> encryptor.decrypt_and_verify(encrypt_salery)
=> 10000

無事暗号化できました。

 

 

VirtualBoxのインストール

https://www.virtualbox.org/wiki/Downloadsからダウンロード、インストールします。

Vagrantのインストール

http://www.vagrantup.com/downloadsからダウンロード、インストールします。

仮想マシンの作成

$ vagrant init --minimal ubuntu/trust64
$ vagrant up

rbenv、ruby-buildのインストール

$ vagrant ssh
$ sudo apt-get install git
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

rubyのインストール

$ rbenv install 2.2.3
Downloading ruby-2.2.3.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/df795f2f99860745a416092a4004b016ccf77e8b82dec956b120f18bdc71edce
Installing ruby-2.2.3...

BUILD FAILED (Ubuntu 14.04 using ruby-build 20151028-21-gd65e2d1)

Inspect or clean up the working tree at /tmp/ruby-build.20151205161434.4919
Results logged to /tmp/ruby-build.20151205161434.4919.log

Last 10 log lines:
The Ruby openssl extension was not compiled.
The Ruby readline extension was not compiled.
The Ruby zlib extension was not compiled.
ERROR: Ruby install aborted due to missing extensions
Try running `apt-get install -y libssl-dev libreadline-dev zlib1g-dev` to fetch missing dependencies.

Configure options used:
  --prefix=/home/vagrant/.rbenv/versions/2.2.3
  LDFLAGS=-L/home/vagrant/.rbenv/versions/2.2.3/lib 
  CPPFLAGS=-I/home/vagrant/.rbenv/versions/2.2.3/include

ライブラリが足りないということでインストールに失敗しました。

$ sudo apt-get install -y libssl-dev libreadline-dev zlib1g-dev
$ rbenv install 2.2.3
$ rbenv global 2.2.3
$ ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]

railsのインストール

$ gem install rails

これでvagrant上にRuby on Railsの開発環境ができました。

 

 

 

articleタグとsectionタグの違いがよく理解できていなかったので、自分で調べて学んだことをまとめてみました。

HTML5では文書のアウトラインを明確にすることが重要になります。なので闇雲にこれらのタグを使用するのではなく、文章の構造を意識してマークアップすることが大切です。

そこで新たに追加された要素がarticlesectionです。もちろんこの他にもいくつかのタグが追加されています。そちらの意味についてはまたの機会に。

W3Cの文書には以下のように書かれています。

article

article要素は、文書、ページ、アプリケーション、またはサイトの中で完全もしくは自己完結した構造を表す。

http://momdo.github.io/html5/sections.html#the-article-element

section

section要素は、文書またはアプリケーションの一般的セクションを表す。

http://momdo.github.io/html5/sections.html#the-section-element

つまり、articleはブログの一つの記事を、sectionは一つの記事の中の章や節のまとまりを表現するときに使用します。

またsectionの項では、

各sectionの主題は、section要素の子として見出し(h1-h6要素)を含むことによって一般に識別されるべきである。

と書かれており、section要素の中には見出しを持つべきだということのようです。

以下の記事がわかりやすいかと思いますので、適宜参照してください。