-
-
Save taichi/915063 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
import static org.junit.Assert.assertNotSame; | |
import java.security.MessageDigest; | |
import org.junit.Test; | |
public class P327Test { | |
/** ハッシュアルゴリズム */ | |
private static final String ALG = "SHA-256"; | |
/** ソルトに用いる固定時文字列(サイト毎に変更してください) */ | |
private static final byte[] FIXEDSALT = "aafsafrevgadsfergvadsefg44wefKYTJRAaawf356" | |
.getBytes(); | |
@Test | |
public void testGetPasswordHash() throws Exception { | |
String userId1 = "0001"; | |
String userId2 = "0002"; | |
String pass1 = "password"; | |
String pass2 = "password"; | |
// 同じパスワードでもユーザIDにより違うハッシュ値が得られることを確認 | |
// assertFalseでは失敗した事しか分からず、どの程度違っているのか結果に出ないので、 | |
// オブジェクトが「同じでない」事をテストする際には、assertNotSameを使う。 | |
assertNotSame(getHash(userId1, pass1), getHash(userId2, pass2)); | |
} | |
/** | |
* 引数で与えた文字列のハッシュ値を取得 | |
* | |
* @param target | |
* @return | |
*/ | |
private String getHash(String userid, String password) throws Exception { | |
MessageDigest md = MessageDigest.getInstance(ALG); | |
// updateメソッドを複数回呼び出す事でsaltを使う事が出来る。 | |
md.update(FIXEDSALT); | |
md.update(userid.getBytes()); | |
byte[] digest = md.digest(password.getBytes()); | |
// byte[] -> String | |
return new String(digest, "UTF-8"); | |
// 例外が発生するケースではテスト失敗なのでログに出したりする必要はない。 | |
// むしろ、JUnitの結果を見る為の画面に出力されず、原因を特定する手間がかかるので良くない。 | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
【ちなみに:例外に関して】
今回はテストコードなのでログに出力することはしませんが、通常はログに出力します。ただし、それで終わってはいけません。
例えば、「fileのcloseに失敗した」というような通常まずおこりえないであろう場合はlogに記録するだけで良いですが、
それ以外(たまに発生するであろうもの)に関しては、ログに記録した上で、以下のような対策をとる必要があります。
・上位にthrowする。(フレームワークやらサーブレットがなんとかしてくれるので、最終的にどうなるかはそこまで意識しなくて大丈夫)
・リトライしてみたり、別の方法でためしてみたりするコードを書く。