文章关键字 ‘SHA1’

用java实现HashCalc的文件指纹校验功能

2007年10月15日,星期一

HashCalc是一款绿色软件,它能根据文件内容生MD4,,,,,SHA-512等hash值。

而java通过 MessageDigest 也可以获取这些信息,因此我写了一段代码,实现 同样的效果:

HashCalc. 代码如下:

————————————

package com.lizongbo.utile;

import java.applet.*;
import java.io.*;
import java.security.*;

public class HashCalc {
public static final char[] hexChar = {
’0′, ’1′, ’2′, ’3′,
’4′, ’5′, ’6′, ’7′,
’8′, ’9′, ‘a’, ‘b’,
‘c’, ‘d’, ‘e’, ‘f’};
public static final String[] hashTypes = new String[] {
“MD2″, “MD5″, “SHA1″, “SHA-256″, “SHA-384″, “″};
public static void main(String[] args) throws
Exception {
///args = new String[] {“D:\\lizongbo\\HashCalc2.02H\\HashCalc.exe”};
if (args == null || args.length < 1) {
System.out.println(
“示例: java com.lizongbo.util.HashCalc D:\\lizongbo\\HashCalc2.02H\\HashCalc.exe”);
System.exit(1);
}
String fileName = args[0];
System.out.println(“需要获取hash的文件为: ” + fileName);
java.util.List<MessageDigest> mds = new java.util.
ArrayList<MessageDigest> ();
for (String hashType : hashTypes) {
MessageDigest md = MessageDigest.getInstance(hashType);
mds.add(md);
}
InputStream fis = null;
try {
fis = new FileInputStream(fileName);
byte[] buffer = new byte[1024];
int numRead = 0;
while ( (numRead = fis.read(buffer)) > 0) {
for (MessageDigest md : mds) {
md.update(buffer, 0, numRead);
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
finally {
if (fis != null) {
fis.close();
}
}
for (MessageDigest md : mds) {
System.out.println(md.getAlgorithm() + ” == ” +
toHexString(md.digest()));

}
}

public static String toHexString(byte[] b) {
StringBuilder sb = new StringBuilder(b.length * 2);
for (int i = 0; i < b.length; i++) {
sb.append(hexChar[ (b[i] & 0xf0) >>> 4]);
sb.append(hexChar[b[i] & 0x0f]);
}
return sb.toString();
}

}

————————————

运行结果为:

需要获取hash的文件为: D:\lizongbo\HashCalc2.02H\HashCalc.exe
MD2 == a21e24d38423437220c77d5b931b4f19
MD5 == 6ab3321f32e4bac6418b799311da4532
SHA1 == 32ea17bee160b4db3088b51626adc7f4b7ee5845
SHA-256 == 40f05c6b32e9da27c2e999297cfde04bbab9aa964f3ca114ff6b6861bc8a0e66
SHA-384 == f7d387143840313b1e77ac17b69671a307c248b4b5f2e61a70558eb552e00c71e1c2e34e152619f734655c50d626308a
SHA-512 == 9ecd1749e31b63e7824694cfba2162f485f2e7fdca192ea2b4add2414c017d96b4b7090354568c98f4d96f63c5aadfa487440de9101578660710a6c01d18d902

Tags: , , , , , , ,