欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-22 10:07:46
...

一、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);