关闭

文件和字符串的加密工具类md5

183人阅读 评论(0) 收藏 举报

直接上算法封装的工具类代码:

[html] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. package com.itydl.utils;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileNotFoundException;  
  6. import java.io.IOException;  
  7. import java.security.MessageDigest;  
  8. import java.security.NoSuchAlgorithmException;  
  9.   
  10. /**  
  11.  * 针对字符串做的md5加密,以及涉及md5操作的工具类  
  12.  * @author lenovo  
  13.  *  
  14.  */  
  15. public class Md5Utils {  
  16.     /**  
  17.      * 返回文件的md5值  
  18.      * @param path  
  19.      *      要加密的文件的路径  
  20.      * @return  
  21.      *      文件的md5值  
  22.      */  
  23.     public static String getFileMD5(String path){  
  24.         StringBuilder sb = new StringBuilder();  
  25.         try {  
  26.             FileInputStream fis = new FileInputStream(new File(path));  
  27.             //获取MD5加密器  
  28.             MessageDigest md = MessageDigest.getInstance("md5");  
  29.             //类似读取文件  
  30.             byte[] bytes = new byte[10240];//一次读取写入10k  
  31.             int len = 0;  
  32.             while((len = fis.read(bytes))!=-1){//从原目的地读取数据  
  33.                 //把数据写到md加密器,类比fos.write(bytes, 0, len);  
  34.                 md.update(bytes, 0, len);  
  35.             }  
  36.             //读完整个文件数据,并写到md加密器中  
  37.             byte[] digest = md.digest();//完成加密,得到md5值,但是是byte类型的。还要做最后的转换  
  38.             for (byte b : digest) {//遍历字节,把每个字节拼接起来  
  39.                 //把每个字节转换成16进制数  
  40.                 int d = b & 0xff;//只保留后两位数  
  41.                 String herString = Integer.toHexString(d);//把int类型数据转为16进制字符串表示  
  42.                 //如果只有一位,则在前面补0.让其也是两位  
  43.                 if(herString.length()==1){//字节高4位为0  
  44.                     herString = "0"+herString;//拼接字符串,拼成两位表示  
  45.                 }  
  46.                 sb.append(herString);  
  47.             }  
  48.               
  49.         } catch (FileNotFoundException e) {  
  50.             // TODO Auto-generated catch block  
  51.             e.printStackTrace();  
  52.         } catch (NoSuchAlgorithmException e) {  
  53.             // TODO Auto-generated catch block  
  54.             e.printStackTrace();  
  55.         } catch (IOException e) {  
  56.             // TODO Auto-generated catch block  
  57.             e.printStackTrace();  
  58.         }  
  59.           
  60.         return sb.toString();  
  61.     }  
  62.       
  63.     /**  
  64.      * 对传递过来的字符串进行md5加密  
  65.      * @param str  
  66.      *      待加密的字符串  
  67.      * @return  
  68.      *      字符串Md5加密后的结果  
  69.      */  
  70.     public static String md5(String str){  
  71.         StringBuilder sb = new StringBuilder();//字符串容器  
  72.         try {  
  73.             //获取md5加密器.public static MessageDigest getInstance(String algorithm)返回实现指定摘要算法的 MessageDigest 对象。  
  74.             MessageDigest md = MessageDigest.getInstance("MD5");  
  75.             byte[] bytes = str.getBytes();//把要加密的字符串转换成字节数组  
  76.             byte[] digest = md.digest(bytes);//使用指定的 【byte 数组】对摘要进行最后更新,然后完成摘要计算。即完成md5的加密  
  77.               
  78.             for (byte b : digest) {  
  79.                 //把每个字节转换成16进制数  
  80.                 int d = b & 0xff;//只保留后两位数  
  81.                 String herString = Integer.toHexString(d);//把int类型数据转为16进制字符串表示  
  82.                 //如果只有一位,则在前面补0.让其也是两位  
  83.                 if(herString.length()==1){//字节高4位为0  
  84.                     herString = "0"+herString;//拼接字符串,拼成两位表示  
  85.                 }  
  86.                 sb.append(herString);  
  87.             }  
  88.         } catch (NoSuchAlgorithmException e) {  
  89.             // TODO Auto-generated catch block  
  90.             e.printStackTrace();  
  91.         }  
  92.           
  93.         return sb.toString();  
  94.     }  
  95. }  
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:100409次
    • 积分:2085
    • 等级:
    • 排名:第18413名
    • 原创:97篇
    • 转载:70篇
    • 译文:0篇
    • 评论:12条
    最新评论