檔案和字串的加密工具類md5
阿新 • • 發佈:2019-02-19
直接上演算法封裝的工具類程式碼:
[html] view plain copy print?- package com.itydl.utils;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
-
/**
- * 針對字串做的md5加密,以及涉及md5操作的工具類
- * @author lenovo
- *
- */
- public class Md5Utils {
- /**
- * 返回檔案的md5值
- * @param path
- * 要加密的檔案的路徑
- * @return
- * 檔案的md5值
- */
- public static String getFileMD5(String path){
-
StringBuilder sb = new StringBuilder();
- try {
- FileInputStream fis = new FileInputStream(new File(path));
- //獲取MD5加密器
- MessageDigest md = MessageDigest.getInstance("md5");
- //類似讀取檔案
- byte[] bytes = new byte[10240];//一次讀取寫入10k
- int len = 0;
-
while((len
- //把資料寫到md加密器,類比fos.write(bytes, 0, len);
- md.update(bytes, 0, len);
- }
- //讀完整個檔案資料,並寫到md加密器中
- byte[] digest = md.digest();//完成加密,得到md5值,但是是byte型別的。還要做最後的轉換
- for (byte b : digest) {//遍歷位元組,把每個位元組拼接起來
- //把每個位元組轉換成16進位制數
- int d = b & 0xff;//只保留後兩位數
- String herString = Integer.toHexString(d);//把int型別資料轉為16進位制字串表示
- //如果只有一位,則在前面補0.讓其也是兩位
- if(herString.length()==1){//位元組高4位為0
- herString = "0"+herString;//拼接字串,拼成兩位表示
- }
- sb.append(herString);
- }
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (NoSuchAlgorithmException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return sb.toString();
- }
- /**
- * 對傳遞過來的字串進行md5加密
- * @param str
- * 待加密的字串
- * @return
- * 字串Md5加密後的結果
- */
- public static String md5(String str){
- StringBuilder sb = new StringBuilder();//字串容器
- try {
- //獲取md5加密器.public static MessageDigest getInstance(String algorithm)返回實現指定摘要演算法的 MessageDigest 物件。
- MessageDigest md = MessageDigest.getInstance("MD5");
- byte[] bytes = str.getBytes();//把要加密的字串轉換成位元組陣列
- byte[] digest = md.digest(bytes);//使用指定的 【byte 陣列】對摘要進行最後更新,然後完成摘要計算。即完成md5的加密
- for (byte b : digest) {
- //把每個位元組轉換成16進位制數
- int d = b & 0xff;//只保留後兩位數
- String herString = Integer.toHexString(d);//把int型別資料轉為16進位制字串表示
- //如果只有一位,則在前面補0.讓其也是兩位
- if(herString.length()==1){//位元組高4位為0
- herString = "0"+herString;//拼接字串,拼成兩位表示
- }
- sb.append(herString);
- }
- } catch (NoSuchAlgorithmException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return sb.toString();
- }
- }