我使用了部分取值的方式來提高MD5的計算速度,這樣的時候,時間主要耗費在了IO中。如果是100K(換成500K也并沒有提高執行的速度)取一個字符計算大約10秒以內。但是如果全部讀取可能要60秒或者更多。對于大文件建議使用一些文件相關信息和部分文件內容做MD5.比如用文件長度和一定間隔取一些字節。
創新互聯建站主營麻陽網站建設的網絡公司,主營網站建設方案,重慶App定制開發,麻陽h5重慶小程序開發搭建,麻陽網站營銷推廣歡迎麻陽等地區企業咨詢
package cdm;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.math.BigInteger;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import org.apache.commons.codec.digest.*;
import org.apache.commons.io.IOUtils;
public class testMD5 {
public static String getMd5ByFile(File file) throws FileNotFoundException {
String value = null;
FileInputStream in = new FileInputStream(file);
try {
MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length());
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(byteBuffer);
BigInteger bi = new BigInteger(1, md5.digest());
value = bi.toString(16);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return value;
}
public static void main(String[] args) throws IOException {
String path="E:\文件.zip";
String v = getMd5ByFile(new File(path));
System.out.println("MD5:"+v.toUpperCase());
FileInputStream fis= new FileInputStream(path);
String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(fis));
IOUtils.closeQuietly(fis);
System.out.println("MD5:"+md5);
//System.out.println("MD5:"+DigestUtils.md5Hex("WANGQIUYUN"));
}
}
這是我以前做的一個小項目時用到md5寫的
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
//將用戶密碼進行md5加密?? 并返回加密后的32位十六進制密碼
public class MD5Util {
public static String md5(String password) {
try {
// 獲取md5對象
MessageDigest md = MessageDigest.getInstance("md5");
// 獲取加密后的密碼并返回十進制字節數組
byte[] bytes = md.digest(password.getBytes());
// 遍歷數組得到每個十進制數并轉換成十六進制
StringBuffer sb = new StringBuffer();
for (byte b : bytes) {
// 把每個數轉成十六進制 存進字符中
sb.append(toHex(b));
}
String finish = sb.toString();
return finish;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
// 十進制轉十六進制方法
private static String toHex(byte b) {
int target = 0;
if (b 0) {
target = 255 + b;
} else {
target = b;
}
int first = target / 16;
int second = target % 16;
return Hex[first] + Hex[second];
}
static String[] Hex = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"a", "b", "c", "d", "e", "f" };
/*public static void main(String[] args) {
String a = MD5Util.md5("1234");
System.out.println(a);
}*/
}
名稱欄目:包含獲取md5java代碼的詞條
URL鏈接:http://m.newbst.com/article10/hjpido.html
成都網站建設公司_創新互聯,為您提供云服務器、網站改版、、自適應網站、ChatGPT、動態網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯