Menu

Documentation

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