Monday, July 01, 2013

Ready to use One way Digest util class in JAVA or Example of SHA-512 Digest Using Java



Ready to use One way digest Java Class


Note : For base64 related method visit this post :


import java.security.MessageDigest;
import java.security.SecureRandom;


/**
 * 
 * @author : ThinkTank
 * 
 */



public class PasswordDigest {

/**
 * This method will compute hash as string for given password
 * 
 * @param salt salt value
 * @param passDigest password digest
 * @param password password which will digested 
 * @param iterationNumber number of iteration
 * @return password hash value
 * @throws Exception
 */
public static String recomputeHash(byte[] salt, String passDigest,String password,int iterationNumber) throws Exception {
 byte regeneratedHash[] = PasswordDigest.getHash(iterationNumber, password, salt);
 return Util.byteToBase64(regeneratedHash);
}

/**
 * @param iterationNumber
 * @param password
 * @param salt
 * @return hash digest as byte array
 * @throws Exception
 */
public static byte[] getHash(int iterationNumber, String password, byte[] salt) throws Exception {
 MessageDigest digest = MessageDigest.getInstance("SHA-512");
 digest.reset();
 digest.update(salt);
 byte[] input = digest.digest(password.getBytes("UTF-8"));
 for (int i = 0; i < iterationNumber; i++) {
  digest.reset();
  input = digest.digest(input);
 }
 return input;
}

/**
 * This method will generate salt value and return it as byte array
 * 
 * @return salt value as byte array
 * @throws Exception
 */
public static byte[] getSalt() throws Exception {
 SecureRandom secureRandom;
 byte[] bSalt = new byte[8];
 secureRandom = SecureRandom.getInstance("SHA1PRNG","SUN");
 secureRandom.nextBytes(bSalt);
 return bSalt;
}

}

No comments:

Post a Comment