パスワードなどをデータベースに保存する場合には、パスワードそのものではなく、パスワードのハッシュ値を格納することが一般的です。ここでは、文字列のハッシュ値(アルゴリズムはSHA256)を計算・取得するサンプルコードを掲載しています。
スポンサーリンク
SHA256 のハッシュ値を計算・取得する
以下は、文字列を引数にとり、SHA256のハッシュ値を計算・取得するサンプルコードであり、取得したハッシュ値は16進数の文字列として変換しています。
なお、本サンプルで最終的に取り出す16進数の文字列はA~Fの文字は大文字になります。データベースに保存されているパスワードと照合する際には、大文字・小文字の区別は行わないほうが無難だと思います。
C#
// 文字列のハッシュ値(SHA256)を計算・取得する protected string _GetHashedTextString(string passwd) { // パスワードをUTF-8エンコードでバイト配列として取り出す byte[] byteValues = Encoding.UTF8.GetBytes(passwd); // SHA256のハッシュ値を計算する SHA256 crypto256 = new SHA256CryptoServiceProvider(); byte[] hash256Value = crypto256.ComputeHash(byteValues); // SHA256の計算結果をUTF8で文字列として取り出す StringBuilder hashedText = new StringBuilder(); for (int i = 0; i < hash256Value.Length; i++) { // 16進の数値を文字列として取り出す hashedText.AppendFormat("{0:X2}", hash256Value[i]); } return hashedText.ToString(); }
Dropbox アカウント流出
Dropbox のアカウントが最大で 6,800万分流出したことが2016年8月31日に発覚しました。パスワードは暗号化されているとのことでしたが、おそらくハッシュ値で保存されていたと予想されます。
すでにハッシュ値は時代遅れであるかもしれませんが。。。
問題は、
- 流出したことが2012年と4年も前であること
- インターネット上に公開されるまで気づかなかったこと
であると思いますが、なかなか難しいでしょう。特にこれらの流出事故(事件?)の多くは内部の人が流出させます。外部から不正に進入して情報を盗み出すのは僅かです。
Dropbox の場合は、どうであるかはわからないですが。
内部の人間を疑いない気持ちもありますが、疑わなくても良いような仕組みを導入することも大切だと思います。ただし、私を含めた時代遅れのおっさんが仕組みを考えるとおそらく不評になるとおもいますし、良いことはないでしょう。むしろ悪です。
紙の書類とか、ハンコとか必要になるかもしれません。。。。。。。
時代が時代なら斉藤一に突かれています。