Skip to content

Instantly share code, notes, and snippets.

@taichi
Forked from seyan/P327Test.java
Created April 12, 2011 06:51
Show Gist options
  • Save taichi/915063 to your computer and use it in GitHub Desktop.
Save taichi/915063 to your computer and use it in GitHub Desktop.
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の結果を見る為の画面に出力されず、原因を特定する手間がかかるので良くない。
}
}
@seyan
Copy link

seyan commented Apr 12, 2011

【ちなみに:例外に関して】
今回はテストコードなのでログに出力することはしませんが、通常はログに出力します。ただし、それで終わってはいけません。
例えば、「fileのcloseに失敗した」というような通常まずおこりえないであろう場合はlogに記録するだけで良いですが、
それ以外(たまに発生するであろうもの)に関しては、ログに記録した上で、以下のような対策をとる必要があります。
・上位にthrowする。(フレームワークやらサーブレットがなんとかしてくれるので、最終的にどうなるかはそこまで意識しなくて大丈夫)
・リトライしてみたり、別の方法でためしてみたりするコードを書く。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment