public boolean checkPasswordWithSalt(final String iPassword, final String iHash, final String algorithm) {
if (!isAlgorithmSupported(algorithm)) {
OLogManager.instance().error(this, "The password hash algorithm is not supported: %s", null, algorithm);
return false;
}
final String[] params = iHash.split(":");
if (params.length != 3)
throw new IllegalArgumentException("Hash does not contain the requested parts: <hash>:<salt>:<iterations>");
final byte[] hash = hexToByteArray(params[0]);
final byte[] salt = hexToByteArray(params[1]);
final int iterations = Integer.parseInt(params[2]);
final byte[] testHash = getPbkdf2(iPassword, salt, iterations, hash.length, algorithm);
return MessageDigest.isEqual(hash, testHash);
}