Digest
S2Directoryには暗号化ハッシュを生成、検証する便利な機能があります。この機能はディレクトリサーバを使わない環境においても、独立して使うことで簡単に暗号化ハッシュを生成、検証することが出来ます。
利用例
- 暗号化パスワードの生成と検証
- CSRF対策のために使うhidden属性に設定する一時キー生成と検証
対応している暗号化ハッシュ
対応している暗号化ハッシュは、一般的なディレクトリサーバで利用できる認証方式からCryptを除いた、MD5、SMD5、SHA、SSHA、PLAINです。
| 形式 | 説明 |
|---|---|
| PLAIN | 平文 (暗号化されません) |
| MD5 | MD5形式の暗号化ハッシュ |
| SMD5 | SMD5形式の暗号化ハッシュ |
| SHA | SHA形式の暗号化ハッシュ |
| SSHA | SSHA形式の暗号化ハッシュ (推奨) |
動かすのに必要なもの
- S2Directory (適当なバージョン)
- S2Container (適当なバージョン)
使い方
PLAIN
public void testPlainDigest() throws NoSuchAlgorithmException {
String pass = "secret";
String hash = "secret";
Digest digest = DigestFactory.getDigest(hash);
assertEquals(true, digest.verify(hash, pass));
hash = digest.create(pass);
assertEquals(true, digest.verify(hash, pass));
digest = DigestFactory.getDigest("PLAIN");
assertEquals(true, digest.verify(hash, pass));
}
MD5
public void testMD5Digest() throws NoSuchAlgorithmException {
String pass = "secret";
String hash = "{MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==";
Digest digest = DigestFactory.getDigest(hash);
assertEquals(true, digest.verify(hash, pass));
hash = digest.create(pass);
assertEquals(true, digest.verify(hash, pass));
digest = DigestFactory.getDigest("MD5");
assertEquals(true, digest.verify(hash, pass));
}
SMD5
public void testSMD5Digest() throws NoSuchAlgorithmException {
String pass = "secret";
String hash = "{SMD5}KNaOGWWWmCgJou1M6cUgt0l1QyA=";
Digest digest = DigestFactory.getDigest(hash);
assertEquals(true, digest.verify(hash, pass));
hash = digest.create(pass);
assertEquals(true, digest.verify(hash, pass));
digest = DigestFactory.getDigest("SMD5");
assertEquals(true, digest.verify(hash, pass));
}
SHA
public void testSHADigest() throws NoSuchAlgorithmException {
String pass = "secret";
String hash = "{SHA}5en6G6MezRroT3XKqkdPOmY/BfQ=";
Digest digest = DigestFactory.getDigest(hash);
assertEquals(true, digest.verify(hash, pass));
hash = digest.create(pass);
assertEquals(true, digest.verify(hash, pass));
digest = DigestFactory.getDigest("SHA");
assertEquals(true, digest.verify(hash, pass));
}
SSHA
public void testSSHADigest() throws NoSuchAlgorithmException {
String pass = "secret";
String hash = "{SSHA}DeqCMzuWq1PMxsXCjLgEc3llb8Kmr1UK";
Digest digest = DigestFactory.getDigest(hash);
assertEquals(true, digest.verify(hash, pass));
hash = digest.create(pass);
assertEquals(true, digest.verify(hash, pass));
digest = DigestFactory.getDigest("SSHA");
assertEquals(true, digest.verify(hash, pass));
}
未対応形式の例外処理
public void testUnknownDigest1() {
try {
Digest digest = DigestFactory.getDigest("{UNKNOWN}");
digest.create("secret");
} catch (NoSuchAlgorithmException e) {
assertTrue(true);
return;
}
assertTrue(false);
}
