ちょっと前に、ログイン機能を作成した際、パスワードを暗号化するか、という議論を目にしたことがありました。
昔だと、「パスワードを暗号化しない」方で実装していましたが、最近はセキュリティが当たり前になってきたので、それもどうかと思います。
なのであらかじめ、パスワードを保管する際に使用する暗号機能の方針ぐらいは調べておこうと思いました。
JavaScript
実際には難しそうなので、パスワード保管の要件を外します。いまのところJavaScript(クライアント側)で暗号化してパスワードを保管しておく安全な方法は難しいです。。
Perl
Digest::SHAを使用します。
- 保管($digest): $digest = hmac_sha256_hex($password, $salt);
- salt: 固定文字列
- チェック: $passwordと$saltを入れて、保管した$digeestと一緒かチェック。
use Digest::SHA qw(hmac_sha256_hex); my $data = "aaa"; my $key = "bb"; my $digest = hmac_sha256_hex($data, $key);
Python
import hashlib, uuid salt = uuid.uuid4().hex password = "aa" hashed_password = hashlib.sha256(password + salt).hexdigest() print (hashed_password)
ruby(rails)
bcryptを使います。すぐには分からなかったので割愛します。
PHP(7.0)
password_hashを使用します。
<?php $input = "aaa"; $hash = password_hash($input, PASSWORD_DEFAULT); print $hash; if (password_verify($input, $hash)) { echo 'Password is valid!'; } else { echo 'Invalid password.'; }