天天看点

用Hash算法对密码进行散列,以及获取Salt的工具类

一、HashUtils(“MD5” / “SHA1”)

public static String getMD5( String str ) {
		return hash( str, "MD5" );
	}

	public static String getMD5( File file ) {
		return hash( file, "MD5" );
	}

	public static String getSHA1( String str ) {
		return hash( str, "SHA1" );
	}

	public static String getSHA1( File file ) {
		return hash( file, "SHA1" );
	}

	/**
	 * 计算字符串的hash值
	 * @param string
	 * @param algorithm
	 * @return
	 */
	private static String hash( String string, String algorithm ) {
		String result = "";
		if( !StringUtils.isEmpty( string ) ) {
			MessageDigest hash = null;
			try {
				hash = MessageDigest.getInstance( algorithm );
				byte[] bytes = hash.digest( string.getBytes( "UTF-8" ) );
				for( byte b : bytes ) {
					String temp = Integer.toHexString( b & 0xff );
					if( temp.length() == 1 ) {
						temp = "0" + temp;
					}
					result += temp;
				}
			} catch( NoSuchAlgorithmException e ) {
				e.printStackTrace();
			} catch( UnsupportedEncodingException e ) {
				e.printStackTrace();
			}
		}
		return result;
	}

	/**
	 * 计算文件的hash值
	 * @param file
	 * @param algorithm
	 * @return
	 */
	private static String hash( File file, String algorithm ) {
		String result = "";
		if( file != null && file.isFile() && file.exists() ) {
			FileInputStream in = null;
			byte[] buffer = new byte[ 1024 ];
			int len;
			try {
				MessageDigest hash = MessageDigest.getInstance( algorithm );
				in = new FileInputStream( file );
				while( ( len = in.read( buffer ) ) != -1 ) {
					hash.update( buffer, 0, len );
				}
				byte[] bytes = hash.digest();

				for( byte b : bytes ) {
					String temp = Integer.toHexString( b & 0xff );
					if( temp.length() == 1 ) {
						temp = "0" + temp;
					}
					result += temp;
				}
			} catch( Exception e ) {
				e.printStackTrace();
			} finally {
				if( null != in ) {
					try {
						in.close();
					} catch( IOException e ) {
						e.printStackTrace();
					}
				}
			}
		}
		return result;
	}
           

二、获取Salt值

Random RANDOM = new SecureRandom();
	byte[] bytes = new byte[16];
	RANDOM.nextBytes(bytes);
	String salt = new BASE64Encoder().encode(bytes);