@Test public void generateFixedSaltTest() { byte[][] input = new byte[5][]; for (int i = 0; i < input.length; i++) { input[i] = randomString(15).getBytes(); logger.debug("Random Input: {}.", EncryptionUtil.byteToHex(input[i])); byte[][] fixedSalt = new byte[10][]; for (int j = 0; j < fixedSalt.length; j++) { fixedSalt[j] = PasswordUtil.generateFixedSalt(input[i]); assertNotNull(fixedSalt[j]); assertTrue(fixedSalt[j].length == PasswordUtil.SALT_BIT_SIZE / 8); logger.debug("Generated Fixed Salt: {}.", EncryptionUtil.byteToHex(fixedSalt[j])); for (int k = 0; k < j; k++) { assertTrue(Arrays.equals(fixedSalt[k], fixedSalt[j])); } } } }
public static byte[] generateFixedSalt(byte[] input) { try { byte[] fixedSalt = new byte[SALT_BIT_SIZE / 8]; MessageDigest sha = MessageDigest.getInstance("SHA-1"); byte[] state = sha.digest(input); sha.update(state); int offset = 0; while (offset < fixedSalt.length) { state = sha.digest(); if (fixedSalt.length - offset > state.length) { System.arraycopy(state, 0, fixedSalt, offset, state.length); } else { System.arraycopy(state, 0, fixedSalt, offset, fixedSalt.length - offset); } offset += state.length; sha.update(state); } return fixedSalt; } catch (NoSuchAlgorithmException e) { logger.error("Exception while generating fixed salt:", e); } return null; }
PasswordUtil { public static byte[] generateFixedSalt(byte[] input) { try { byte[] fixedSalt = new byte[SALT_BIT_SIZE / 8]; MessageDigest sha = MessageDigest.getInstance("SHA-1"); byte[] state = sha.digest(input); sha.update(state); int offset = 0; while (offset < fixedSalt.length) { state = sha.digest(); if (fixedSalt.length - offset > state.length) { System.arraycopy(state, 0, fixedSalt, offset, state.length); } else { System.arraycopy(state, 0, fixedSalt, offset, fixedSalt.length - offset); } offset += state.length; sha.update(state); } return fixedSalt; } catch (NoSuchAlgorithmException e) { logger.error("Exception while generating fixed salt:", e); } return null; } }
PasswordUtil { public static byte[] generateFixedSalt(byte[] input) { try { byte[] fixedSalt = new byte[SALT_BIT_SIZE / 8]; MessageDigest sha = MessageDigest.getInstance("SHA-1"); byte[] state = sha.digest(input); sha.update(state); int offset = 0; while (offset < fixedSalt.length) { state = sha.digest(); if (fixedSalt.length - offset > state.length) { System.arraycopy(state, 0, fixedSalt, offset, state.length); } else { System.arraycopy(state, 0, fixedSalt, offset, fixedSalt.length - offset); } offset += state.length; sha.update(state); } return fixedSalt; } catch (NoSuchAlgorithmException e) { logger.error("Exception while generating fixed salt:", e); } return null; } private  PasswordUtil(); }
PasswordUtil { public static byte[] generateFixedSalt(byte[] input) { try { byte[] fixedSalt = new byte[SALT_BIT_SIZE / 8]; MessageDigest sha = MessageDigest.getInstance("SHA-1"); byte[] state = sha.digest(input); sha.update(state); int offset = 0; while (offset < fixedSalt.length) { state = sha.digest(); if (fixedSalt.length - offset > state.length) { System.arraycopy(state, 0, fixedSalt, offset, state.length); } else { System.arraycopy(state, 0, fixedSalt, offset, fixedSalt.length - offset); } offset += state.length; sha.update(state); } return fixedSalt; } catch (NoSuchAlgorithmException e) { logger.error("Exception while generating fixed salt:", e); } return null; } private  PasswordUtil(); static byte[] generateRandomSalt(); static byte[] generateFixedSalt(byte[] input); static byte[] generateHash(char[] password, byte[] salt); static SecretKey generateAESKeyFromPassword(String password, String pin, AES_KEYLENGTH keyLength); static boolean validatePassword(char[] password, byte[] salt, byte[] correctHash); }
PasswordUtil { public static byte[] generateFixedSalt(byte[] input) { try { byte[] fixedSalt = new byte[SALT_BIT_SIZE / 8]; MessageDigest sha = MessageDigest.getInstance("SHA-1"); byte[] state = sha.digest(input); sha.update(state); int offset = 0; while (offset < fixedSalt.length) { state = sha.digest(); if (fixedSalt.length - offset > state.length) { System.arraycopy(state, 0, fixedSalt, offset, state.length); } else { System.arraycopy(state, 0, fixedSalt, offset, fixedSalt.length - offset); } offset += state.length; sha.update(state); } return fixedSalt; } catch (NoSuchAlgorithmException e) { logger.error("Exception while generating fixed salt:", e); } return null; } private  PasswordUtil(); static byte[] generateRandomSalt(); static byte[] generateFixedSalt(byte[] input); static byte[] generateHash(char[] password, byte[] salt); static SecretKey generateAESKeyFromPassword(String password, String pin, AES_KEYLENGTH keyLength); static boolean validatePassword(char[] password, byte[] salt, byte[] correctHash); static final int HASH_BIT_SIZE; static final int SALT_BIT_SIZE; }