暗号 2021年06月19日 00:50   編集
Web上で使用するパスワードはほとんど半角英数字と記号を使うので、全角の日本語は使えないと思っていたが、必ずしもそういうわけではないようだ。この用語集作成スクリプトterm.phpや掲示板スクリプトbbs.phpでも、管理者認証などのためパスワードを設定することになっているが、試しに日本語のパスワードを設定したところ、問題なく使えた。

しかし、一般的には日本語のパスワードは使えないということになっている。たぶんパスワードの入力に のようなpasswordフィールドを使っているからだと思う。このpasswordフィールドは、入力した文字が伏せ字になるだけでなくIMEが無効になっているので、日本語が入力できないのだ。直接入力するのではなくコピーアンドペーストすれば入力できないことはないが、半角文字が使われていないとかいわれて受け付けられない場合もあるだろう。
パスワードの入力にpasswordフィールドを使っているのは、入力画面を盗み見るショルダーハッキング対策だと思うが、入力した本人にも見えないので、正しく入力できているのか確認しにくいという問題もある。(特に新しいパスワードを登録する場合)続きを読む
[1]実際にはもっと多い
[2]phpではmd5などのハッシュ関数も使えるが、パスワードの暗号化には推奨されていない
counter:324
CGI 暗号 2016年08月22日 12:21   編集
パスワードを保存する必要のあるCGIでは、生のパスワードのまま保存するより、暗号化したほうが安心ということでこれまですべてcrypt関数で暗号化した上で保存していました。
このcrypt関数は手軽に使えて便利なのですが、有効なパスワードの文字数が8文字までという制限があります。

たとえば、「password123」というパスワードをcryptで暗号化して保存すると、9文字以降は無視されるため、「password」でも、「password012」でも正しいパスワードと認識されてしまいます。

Digest::MD5モジュールを使う

これは、やはりマズイので、何とかできないか調べてみました。続きを読む
counter:4,398
PHP 暗号 2016年08月22日 12:20   編集
パスワードを暗号化する場合、perlでは、crypt関数を使うと有効な文字列が8文字までという制限が有るため、MD5モジュールを使って暗号化していたが、PHPの場合は逆にcryptを使った方が強度は高いようだ。
暗号化の目的は、サーバー上に保存したパスワードが万一漏洩しても、元のパスワードが知られないようにするためで、この場合復号する必要は無い。暗号化されたパスワードと元のパスワードを照合して、暗号化されたものが元のパスワードから生成されたものであることがわかりさえすればいい。
PHPでmd5()関数を使うと、ハッシュ値と呼ばれる32桁の16進数に変換される。
$str = 'abcd';
$md5 = md5($str);
echo $md5;
実行結果
e2fc714c4727ee9395f324cd2e7f331f
たとえば上記のように「abcd」という文字列をmd5でハッシュ化すると、「e2fc714c4727ee9395f324cd2e7f331f」という文字列が得られる。
「abcd」とハッシュ化された文字列は1対1の対応で、「abcd」を何度md5でハッシュ化しても「e2fc714c4727ee9395f324cd2e7f331f」になる。
このハッシュ値から元の文字列を得る方法はない。つまり「e2fc714c4727ee9395f324cd2e7f331f」から元の「abcd」を得ることはできないということが、暗号の強度の根拠になっている。
ところが、ハッシュ値のデータベースから元の値を得るモジュールなるものが存在するらしい。続きを読む
counter:4,299