diff options
| author | chenjinsong <[email protected]> | 2018-09-27 16:11:54 +0800 |
|---|---|---|
| committer | chenjinsong <[email protected]> | 2018-09-27 16:11:54 +0800 |
| commit | 56d71f261a8bd6031e47e2bf80867049a2aa13da (patch) | |
| tree | f09257b2143782a333a9eda3395137837d9bdad1 /src/com/nis/nmsclient/util/MD5Util.java | |
initial commit
Diffstat (limited to 'src/com/nis/nmsclient/util/MD5Util.java')
| -rw-r--r-- | src/com/nis/nmsclient/util/MD5Util.java | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/com/nis/nmsclient/util/MD5Util.java b/src/com/nis/nmsclient/util/MD5Util.java new file mode 100644 index 0000000..7d2ac4f --- /dev/null +++ b/src/com/nis/nmsclient/util/MD5Util.java @@ -0,0 +1,99 @@ +package com.nis.nmsclient.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.nio.MappedByteBuffer; +import java.nio.channels.FileChannel; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class MD5Util { + /** + * 默认的密码字符串组合,apache校验下载的文件的正确性用的就是默认的这个组合 + */ + protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', + '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; + protected static MessageDigest messagedigest = null; + static { + try { + messagedigest = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException nsaex) { + System.err.println(MD5Util.class.getName() + + "初始化失败,MessageDigest不支持MD5Util。"); + nsaex.printStackTrace(); + } + } + + public static void main(String[] args) throws IOException { + long begin = System.currentTimeMillis(); + + // 2EA3E66AC37DF7610F5BD322EC4FFE48 670M 11s kuri双核1.66G 2G内存 + File big = new File("I:/大型安装程序的压缩版本/Rational rose 2003.rar"); + + String md5 = getFileMD5String(big); + + long end = System.currentTimeMillis(); + System.out.println("md5:" + md5 + " time:" + ((end - begin) / 1000) + + "s"); + } + + /** + * 适用于上G大的文件 + * + * @param file + * @return + * @throws IOException + */ + public static String getFileMD5String(File file) throws IOException { + FileInputStream in = null; + try { + in = new FileInputStream(file); + FileChannel ch = in.getChannel(); + MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0, + file.length()); + messagedigest.update(byteBuffer); + return bufferToHex(messagedigest.digest()); + } catch (Exception e) { + throw new IOException(e.getCause()); + }finally{ + if(in!=null){ + in.close(); + } + } + } + + public static String getMD5String(String s) { + return getMD5String(s.getBytes()); + } + + public static String getMD5String(byte[] bytes) { + messagedigest.update(bytes); + return bufferToHex(messagedigest.digest()); + } + + private static String bufferToHex(byte bytes[]) { + return bufferToHex(bytes, 0, bytes.length); + } + + private static String bufferToHex(byte bytes[], int m, int n) { + StringBuffer stringbuffer = new StringBuffer(2 * n); + int k = m + n; + for (int l = m; l < k; l++) { + appendHexPair(bytes[l], stringbuffer); + } + return stringbuffer.toString(); + } + + private static void appendHexPair(byte bt, StringBuffer stringbuffer) { + char c0 = hexDigits[(bt & 0xf0) >> 4]; + char c1 = hexDigits[bt & 0xf]; + stringbuffer.append(c0); + stringbuffer.append(c1); + } + + public static boolean checkPassword(String password, String md5PwdStr) { + String s = getMD5String(password); + return s.equals(md5PwdStr); + } +} |
