@NotNull private static String generateHash(@NotNull String pwd, @NotNull String algorithm, @Nullable String salt, int iterations) throws NoSuchAlgorithmException, UnsupportedEncodingException { StringBuilder passwordHash = new StringBuilder(); passwordHash.append('{').append(algorithm).append('}'); if (salt != null && !salt.isEmpty()) { StringBuilder data = new StringBuilder(); data.append(salt).append(pwd); passwordHash.append(salt).append(DELIMITER); if (iterations > NO_ITERATIONS) { passwordHash.append(iterations).append(DELIMITER); } String digest; if (algorithm.startsWith(PBKDF2_PREFIX)) { digest = generatePBKDF2(pwd, salt, algorithm, iterations, 128); } else { digest = generateDigest(data.toString(), algorithm, iterations); } passwordHash.append(digest); } else { // backwards compatible to jr 2.0: no salt, no iterations passwordHash.append(Text.digest(algorithm, pwd.getBytes(ENCODING))); } return passwordHash.toString(); }
@Nonnull private static String generateHash(@Nonnull String pwd, @Nonnull String algorithm, @Nullable String salt, int iterations) throws NoSuchAlgorithmException, UnsupportedEncodingException { StringBuilder passwordHash = new StringBuilder(); passwordHash.append('{').append(algorithm).append('}'); if (salt != null && !salt.isEmpty()) { StringBuilder data = new StringBuilder(); data.append(salt).append(pwd); passwordHash.append(salt).append(DELIMITER); if (iterations > NO_ITERATIONS) { passwordHash.append(iterations).append(DELIMITER); } String digest; if (algorithm.startsWith(PBKDF2_PREFIX)) { digest = generatePBKDF2(pwd, salt, algorithm, iterations, 128); } else { digest = generateDigest(data.toString(), algorithm, iterations); } passwordHash.append(digest); } else { // backwards compatible to jr 2.0: no salt, no iterations passwordHash.append(Text.digest(algorithm, pwd.getBytes(ENCODING))); } return passwordHash.toString(); }