转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/52200008   点击打开链接

之前写过一篇博文,是针对字符串进行md5加密的。今天对其进行改进,加入针对某个文件,进行md5加密,并获取加密后的值。并把两个功能封装成了工具类,如果有需要这个算法的,可直接使用。

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

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 = fis.read(bytes))!=-1){//从原目的地读取数据
//把数据写到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();
}
}

Android初级教程:对文件和字符串进行MD5加密工具类的更多相关文章

  1. 《java入门第一季》之对文件和字符串进行MD5加密工具类

    上一篇介绍了MD5加密算法,之前写的代码有些冗余,而且可读性很差.今天把对文本数据的加密,以及获取文件的md5值做一个封装类.代码如下: package com.itydl.utils; import ...

  2. wemall app商城源码android开发MD5加密工具类

    wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享android开发MD5加密工具类主要代码,供 ...

  3. Android修改默认SharedPreferences文件的路径,SharedPreferences常用工具类

    import android.app.Activity; import android.content.Context; import android.content.ContextWrapper; ...

  4. android开发MD5加密工具类(一)

    MD5加密工具类整理: package com.gzcivil.utils; import java.io.UnsupportedEncodingException; import java.secu ...

  5. MD5算法【计算文件和字符串的MD5值】

    1. MD5算法是一种散列(hash)算法(摘要算法,指纹算法),不是一种加密算法(易错).任何长度的任意内容都可以用MD5计算出散列值.MD5的前身:MD2.MD3.MD4.介绍工具:CalcMD5 ...

  6. WP开发笔记——字符串 转 MD5 加密

    将字符串进行MD5加密,返回加密后的字符串. 从这里下载Md5.cs文件:http://pan.baidu.com/s/1hq3gpnu. 添加到Windows Phone 7项目中,在代码里面这样调 ...

  7. Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...

  8. Linux下对字符串进行MD5加密

    Linux下对字符串进行MD5加密 比如要用MD5在linux下加密字符串“test",可以使用命令:$ echo -n test|md5sum098f6bcd4621d373cade4e8 ...

  9. Java中将字符串与unicode的相互转换工具类

    unicode编码规则 unicode码对每一个字符用4位16进制数表示.具体规则是:将一个字符(char)的高8位与低8位分别取出,转化为16进制数,如果转化的16进制数的长度不足2位,则在其后补0 ...

随机推荐

  1. UOJ #236. 【IOI2016】railroad

    Description Anna 在一个游乐园工作.她负责建造一个新的过山车铁路.她已经设计了影响过山车速度的 nn 个特殊的路段(方便起见标记为 00 到 n−1n−1).现在 Anna 必须要把这 ...

  2. ●BZOJ 3963 [WF2011]MachineWorks

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3963 题解: 斜率优化DP,CDQ分治. 先按时间排序.(规定以下内容的第i台机器的卖出时间 ...

  3. ●BZOJ 1855 [Scoi2010]股票交易

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1855 题解: DP,单调队列优化.(好久没做 DP题,居然还意外地想出来了) 定义 dp[i ...

  4. candy(动态规划)

    题目描述 There are N children standing in a line. Each child is assigned a rating value. You are giving ...

  5. Failed to connect to GitHub to update the CocoaPods/Specs specs repo - Please check if you are offline, or that GitHub is down

    Failed to connect to GitHub to update the CocoaPods/Specs specs repo - Please check if you are offli ...

  6. 开发一个 app 有多难?

    171 个回答 默认排序​ 道衍天机 有事情的加微信1293190838找我 1,150 人赞同了该回答 ----------------------------------------------- ...

  7. tf.nn.conv2d 和 tf.nn.max_pool 中 padding 分别为 'VALID' 和 'SAME' 的直觉上的经验和测试代码

    这个地方一开始是迷糊的,写代码做比较分析,总结出直觉上的经验. 某人若想看精准的解释,移步这个网址(http://blog.csdn.net/fireflychh/article/details/73 ...

  8. 16. 3Sum Closest(中等)

    Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...

  9. ECC公钥格式详解

    本文首先介绍公钥格式相关的若干概念/技术,随后以示例的方式剖析DER格式的ECC公钥,最后介绍如何使用Java生成.解析和使用ECC公钥. ASN.1 Abstract Syntax Notation ...

  10. c++银行家算法

    #include <iostream> #include<string> #define False 0 #define True 1 using namespace std; ...