Package se.unlogic.standardutils.crypto

Source Code of se.unlogic.standardutils.crypto.EncryptionUtils

package se.unlogic.standardutils.crypto;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.nio.charset.Charset;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import se.unlogic.standardutils.operation.ProgressMeter;
import se.unlogic.standardutils.streams.StreamUtils;


public class EncryptionUtils {

  public static String hash(String string, String algorithm) throws UnsupportedEncodingException{

    return hash(string, algorithm, Charset.defaultCharset().toString());
  }

  public static String hash(String string, String algorithm, String encoding) throws UnsupportedEncodingException{

    try {
      MessageDigest digest = MessageDigest.getInstance(algorithm);

      digest.update(string.getBytes(encoding));

      byte[] encodedPassword = digest.digest();

      return new BigInteger(1, encodedPassword).toString(16);

      //TODO fix if hash starts with zeroes!

    } catch (NoSuchAlgorithmException e) {

      throw new RuntimeException(e);
    }
  }

  public static String hash(File file, String algorithm) throws IOException{

    return hash(file, algorithm, null);
  }

  public static String hash(File file, String algorithm, ProgressMeter progressMeter) throws IOException{

    FileInputStream fileInputStream = null;

    try {
      MessageDigest digest = MessageDigest.getInstance(algorithm);
      fileInputStream = new FileInputStream(file);

      DigestInputStream digestInputStream = new DigestInputStream(fileInputStream, digest);

      if(progressMeter != null){

        progressMeter.setStartTime();
        progressMeter.setFinish(file.length());
      }

      byte[] buffer = new byte[8192];

      int bytesRead = 1;

      if(progressMeter != null){

        while ((bytesRead = digestInputStream.read(buffer)) != -1){

          progressMeter.incrementCurrentPosition(bytesRead);
        }

      }else{

        while ((bytesRead = digestInputStream.read(buffer)) != -1){}
      }

      byte[] hash = digest.digest();

      if(progressMeter != null){

        progressMeter.setEndTime();
      }

      return new BigInteger(1, hash).toString(16);

    } catch (NoSuchAlgorithmException e) {

      throw new RuntimeException(e);

    }finally{

      StreamUtils.closeStream(fileInputStream);
    }
  }

  public static String mysqlPasswordHash(String string){

    try {
      MessageDigest digest = MessageDigest.getInstance(HashAlgorithms.SHA1);

      try {
        digest.update(string.getBytes("UTF-8"));

      } catch (UnsupportedEncodingException e) {

        throw new RuntimeException(e);
      }

      byte[] encodedPassword = digest.digest();

      digest.update(encodedPassword);

      encodedPassword = digest.digest();

      String hash = new BigInteger(1, encodedPassword).toString(16).toUpperCase();

      while(hash.length() < 40){

        hash = "0" + hash;
      }

      return "*" + hash;

    } catch (NoSuchAlgorithmException e) {

      throw new RuntimeException(e);
    }
  }
}
TOP

Related Classes of se.unlogic.standardutils.crypto.EncryptionUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.