@Test
public void testEncrypt() {

    assertThat("同じパスワードを暗号化すると、同じ文字列となること。", sut.encrypt("salt", "password"), is(sut.encrypt("salt", "password")));
    assertThat("異なるパスワードを暗号化すると、異なる文字列となること。", sut.encrypt("salt", "one"), is(not(sut.encrypt("salt", "another"))));
    assertThat("同じパスワードでも、ソルトが異なると、異なる文字列となること。", sut.encrypt("one", "password"), is(not(sut.encrypt("another", "password"))));
    PBKDF2PasswordEncryptor itr = createEncryptor();
    itr.setIterationCount(1);
    assertThat("設定したiterationCountでストレッチングされること。", itr.encrypt("salt", "password"), is(not(sut.encrypt("salt", "password"))));
    PBKDF2PasswordEncryptor len = createEncryptor();
    len.setKeyLength(160);
    // 160bitをBase64エンコードすると、28byteになる。
    // 160bit -> 6bitずつblock化されて27block -> 1blockが8bitに変換されて27byte -> 4の倍数まで"="でfillされて28byte
    assertThat("設定したkeyLengthの長さの暗号化されたパスワードが生成されること", len.encrypt("salt", "password").length(), is(28));
    PBKDF2PasswordEncryptor fix = createEncryptor();
    fix.setFixedSalt("someOtherFixedSaltString");
    assertThat("設定したfixedSaltを使用してソルトが生成されていること。", fix.encrypt("salt", "password"), is(not(sut.encrypt("salt", "password"))));
}