用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);
上一篇: 放苹果 博客分类: java
下一篇: 数组----转置矩阵