Ruby,Railsの暗号化いろいろ

2021.04.16 Ruby

RubyやRailsにおける暗号化について忘備録としてまとめました。Crypt、OpenSSL::Cipher、message_verifier、message_encryptor、MD5、bcrypt、encryptor、attr_encrypted などを紹介します。

Crypt

rubyで使える暗号化で、暗号化されたものから元の文字列を求めることはできません。str.crypt('secret_key') で暗号化できます。

message_verifier

remember meのトークンの実装に使われたりします。暗号化することも復号することもできます。Rails.application.message_verifier('secret_key').generate({ token: 'i am bob' }) で生成し、verify で検証・復号します。

message_encryptor

message_verifierと似た感じで使えます。ActiveSupport::MessageEncryptor では key が32バイト必要なので、KeyGenerator で key を生成してから encrypt_and_sign / decrypt_and_verify を使います。

MD5

与えられた文字列を128bitの値に変換します。元の文字列を求めることはできない(ハッシュ化)。Digest::MD5.hexdigest('hello') などで使えますが、セキュリティ用途では安全とは言えなくなっています。

bcrypt

gem 'bcrypt' でユーザーのパスワードを暗号化したり、authenticate メソッドを実装してくれます。モデルに has_secure_password と書き、password_digest カラムを用意すれば、password と password_confirmation を渡してユーザー作成し、authenticate(params[:password]) でログイン判定できます。

encryptor

gemで暗号化・復号化ができます。Encryptor.encrypt / Encryptor.decrypt で value, key, iv を渡して利用します。AES-*-GCM を使った場合の既知のバグがあるため、READMEを確認して利用してください。

システム開発に興味をお持ちの方は、お気軽にご相談ください。初回のご相談は無料です。

相談する

ブログ一覧へ