JAVA MessageDigest MD5 SHA(二)

2014-11-24 11:30:25 · 作者: · 浏览: 14
} finally {
try {
digestInputStream.close();
} catch (Exception e) {
}
try {
fileInputStream.close();
} catch (Exception e) {
}
}
}
测试文件MD5的main方法
[java]
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
try {
System.out.println(fileMD5("E:/软件/VS2008ProEdition90DayTrialCHSX1435983.iso"));
} catch (IOException e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println((endTime - startTime)/1000);
}
最一般的用户,对用户名和密码进行MD5
我们知道,编程中数据的传输,保存,为了考虑安全性的问题,需要将数据进行加密.我们拿数据库做例子.如果一个用户注册系统的数据库,没有对用户的信息进行保存,如,我去页面注册,输入"Vicky","123456".注册.web服务器未对数据进行加密而直接写入数据库,那么数据库中的用户信息,便是一个直接可用的数据!一旦服务器服务器被黑~那么用户的信息将毫无保留的展现在 黑客面前...为了解决这个弊端,现在大多数都会将信息进行 MD5 加密.如"Vicky"与"123456"加密后,会生成16位或者32位字符串.而黑客即便获得这些数据也无法使用...
[java]
@Test
public void testMD() {
try {
String username = "Vicky";
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(username.getBytes());
String usernameMD5 = messageDigest.digest().toString();
System.out.println(usernameMD5);
} catch (Exception e) {
e.printStackTrace();
}
}
打印的是:[B@107077e,这是因为输出的是byte[](messageDigest.digest()得到的是个二进制byte数组,有可能某些byte是不可打印的字符。)...我们可以使用Base64来处理byte[]。
MessageDigest不仅仅只为我们提供了"MD5"加密,还提供了"SHA-1"等四种不同的加密方式。
创建的方法只为: MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
MD5与SHA-1的区别为:MD5是16位,SHA是20位(这是两种报文摘要的算法)
[java]
public static void main(String[] args) throws Exception {
String Str = "H浙江省要台州要市";
getFeatureSHAbyte(Str);
}
public static byte[] getFeatureSHAbyte(String key) throws Exception {
//hashType = "SHA1";
//hashType = "SHA-256";
//hashType = "SHA-384";
//hashType = "SHA-512";
MessageDigest messageDigest = MessageDigest.getInstance("SHA-512");
messageDigest.update(key.getBytes());
byte[] B = key.getBytes();
System.out.print("原二进制数:");
for(int i : B){
System.out.print(i+",");
}
System.out.println(Base64.encode(messageDigest.digest()));
return B;
}
当然我们可以编写函数,处理二进制转hex字符串.
[java]
/**
* 将16位byte[] 转换为32位String
*
* @param buffer
* @return
*/
private String toHex(byte buffer[]) {
StringBuffer sb = new StringBuffer(buffer.length * 2);
for (int i = 0; i < buffer.length; i++) {
sb.append(Character.forDigit((buffer[i] & 240) >> 4, 16));
sb.append(Character.forDigit(buffer[i] & 15, 16));
}
return sb.toString();
}