- 不可逆な暗号でパスワードを暗号化し、データベースに保存
- 認証をする際は入力されたパスワードを同じ方式で暗号化し、その結果を元にデータベース参照する
という方法をとります。そこで、Javaでパスワードを暗号化する方法を紹介します。今回はできるだけJavaの標準のライブラリを利用する方法を採用し、MD5で暗号化する方法を紹介します。
下記のプログラムは2つのメソッドがありますが、上記が今回の本題です。MessageDigiestクラスを利用して、MD5形式で暗号化しています。ここで問題なのは、digestメソッドで生成されるのがbyte型配列であるということ。2つの目のメソッドはbyte型を16進表記のStringに変えるメソッドです。これを利用することで扱いやすくなります。
なお、掲載しているサンプルコードは下記のサイトのコードを引用させてもらいました。
下記のプログラムは2つのメソッドがありますが、上記が今回の本題です。MessageDigiestクラスを利用して、MD5形式で暗号化しています。ここで問題なのは、digestメソッドで生成されるのがbyte型配列であるということ。2つの目のメソッドはbyte型を16進表記のStringに変えるメソッドです。これを利用することで扱いやすくなります。
なお、掲載しているサンプルコードは下記のサイトのコードを引用させてもらいました。
参考サイト: [Java]MD5、DESで暗号化する(Creative Gear とあるWebエンジニアの活動記録)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public String encodePassdigiest(String password){ | |
byte[] enclyptedHash=null; | |
// MD5で暗号化したByte型配列を取得する | |
MessageDigest md5; | |
try { | |
md5 = MessageDigest.getInstance("MD5"); | |
md5.update(password.getBytes()); | |
enclyptedHash = md5.digest(); | |
// 暗号化されたByte型配列を、16進数表記文字列に変換する | |
} catch (NoSuchAlgorithmException e) { | |
// TODO Auto-generated catch block | |
e.printStackTrace(); | |
} | |
return bytesToHexString(enclyptedHash); | |
} | |
private String bytesToHexString(byte[] fromByte) { | |
StringBuilder hexStrBuilder = new StringBuilder(); | |
for (int i = 0; i < fromByte.length; i++) { | |
// 16進数表記で1桁数値だった場合、2桁目を0で埋める | |
if ((fromByte[i] & 0xff) < 0x10) { | |
hexStrBuilder.append("0"); | |
} | |
hexStrBuilder.append(Integer.toHexString(0xff & fromByte[i])); | |
} | |
return hexStrBuilder.toString(); | |
} |
0 件のコメント:
コメントを投稿