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); }