private String validateAlgorithm(final String iAlgorithm) { String validAlgo = iAlgorithm; if (!isAlgorithmSupported(iAlgorithm)) { // Downgrade it to PBKDF2_ALGORITHM. validAlgo = PBKDF2_ALGORITHM; OLogManager.instance().debug(this, "The %s algorithm is not supported, downgrading to %s", iAlgorithm, validAlgo); } return validAlgo; }
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; } // SPLIT PARTS 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); }