Java实现文件MD5加密
代码实现:
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.security.MessageDigest;
- public class MD5Util {
- static char hexdigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
- /**
- * @funcion 对文件全文生成MD5摘要
- * @param file:要加密的文件
- * @return MD5摘要码
- */
- public static String getMD5(File file) {
- FileInputStream fis = null;
- try {
- MessageDigest md = MessageDigest.getInstance("MD5");
- fis = new FileInputStream(file);
- byte[] buffer = new byte[2048];
- int length = -1;
- while ((length = fis.read(buffer)) != -1) {
- md.update(buffer, 0, length);
- }
- byte[] b = md.digest();
- return byteToHexString(b);
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- } finally {
- try {
- fis.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- /**
- * @function 把byte[]数组转换成十六进制字符串表示形式
- * @param tmp 要转换的byte[]
- * @return 十六进制字符串表示形式
- */
- private static String byteToHexString(byte[] tmp) {
- String s;
- // 用字节表示就是 16 个字节
- // 每个字节用 16 进制表示的话,使用两个字符,所以表示成 16 进制需要 32 个字符
- // 比如一个字节为01011011,用十六进制字符来表示就是“5b”
- char str[] = new char[16 * 2];
- int k = 0; // 表示转换结果中对应的字符位置
- for (int i = 0; i < 16; i++) { // 从第一个字节开始,对 MD5 的每一个字节转换成 16 进制字符的转换
- byte byte0 = tmp[i]; // 取第 i 个字节
- str[k++] = hexdigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换, >>> 为逻辑右移,将符号位一起右移
- str[k++] = hexdigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换
- }
- s = new String(str); // 换后的结果转换为字符串
- return s;
- }
- public static void main(String arg[]) {
- String a = getMD5(new File("e:/a.txt"));
- String b = getMD5(new File("e:/b.txt"));
- String c = getMD5(new File("e:/c.txt"));
- System.out.println("a.txt的摘要值为:" + a);
- System.out.println("b.txt的摘要值为:" + b);
- System.out.println("c.txt的摘要值为:" + c);
- if(a.equals(b)) {
- System.out.println("a.txt中的内容与b.txt中的内容一致");
- } else {
- System.out.println("a.txt中的内容与b.txt中的内容不一致");
- }
- if(a.equals(c)) {
- System.out.println("a.txt中的内容与c.txt中的内容一致");
- } else {
- System.out.println("a.txt中的内容与c.txt中的内容不一致");
- }
- }
- }
运行之前建立文件:
在E盘根目录下建立a.txt、b.txt和c.txt。
a.txt中的内容为“123456”。
b.txt中的内容为“123456”。
c.txt中的内容为“654321”。
运行结果:
a.txt的摘要值为:c4ca4238a0b923820dcc509a6f75849b
b.txt的摘要值为:e10adc3949ba59abbe56e057f20f883e
c.txt的摘要值为:c33367701511b4f6020ec61ded352059
a.txt中的内容与b.txt中的内容不一致
a.txt中的内容与c.txt中的内容不一致
结论:
从代码本身和运行结果都可以看出,MD5对文件的加密是加密文件中的内容,不管文件名是什么,相同的文件内容经过MD5算法处理后得到的摘要值也相同。
Java实现文件MD5加密的更多相关文章
- Java 语言实现 MD5 加密
Java 语言实现 MD5 加密 背景说明 在实际项目中,为了安全性考虑,经常要求账号密码是以加密后的密文形式,保存到数据库中. 这样,即使有人获取到了数据库中的密文密码,也不知道明文密码信息是什么, ...
- Java 自带MD5加密 Demo
package demo; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; pub ...
- Java中使用MD5加密的简单实现
import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorith ...
- java 短连接+MD5加密短链接
java 短连接+MD5加密短链接 import java.security.MessageDigest; public class ShotUrlUtil { public static void ...
- 通过java语言实现MD5加密
通过java语言实现MD5加密public static String getMd5(String str) { try { MessageDigest md5 = MessageDigest.get ...
- Java实现文件的加密与解密
最近在做一个项目,需要将资源文件(包括图片.动画等类型)进行简单的加密后再上传至云上的服务器,而在应用程序中对该资源使用前先将读取到的文件数据进行解密以得到真正的文件信息.此策略的原因与好处是将准备好 ...
- password、文件MD5加密,passwordsha256、sha384、sha512Hex等加密
package encryption; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io. ...
- java中使用MD5加密技术
在项目中经常会对一些信息进行加密,现在常用的信息加密技术有:MD5.RSA.DES等,今天主要说一下,md5加密,以及如何在java代码根据自己的业务需求使用md5. MD5简介: MD5即Messa ...
- java后端制作MD5加密
由于一次业务的需要,我制作了一次密码的修改子业务. 当用户忘记密码的情况下,我需要动态的发给他一个6位的随机密码,通过即时通,短信,微信等.并同时修改数据库中的原密码为这6位的随机密码.让用户再去修改 ...
随机推荐
- Mysql+ODBC+OpenLDAP
# 1.安装相关软件yum install wget unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel -yyum install mys ...
- 日志rsyslog
(1)日志基础 1)简介 rsyslog:记录大部分与系统操作有关,例如安全,认证sshd,su,计划任务at,cron rsyslog日志可以存在本地,也可以存放在远程服务器 2)常见的日志文件 / ...
- MySQL常用的数学函数
在使用mysql自带的函数要慎重,说是会影响数据执行效率,代价太大.这个也要区分开,区分快软件的引用范畴,比如说内部系统业务逻辑比较复杂,功能点很细,但是并发量不是很大,这个时候用MySQL自带的函数 ...
- python模块之HTMLParser
HTMLParser是python用来解析html的模块.它可以分析出html里面的标签.数据等等,是一种处理html的简便途径. HTMLParser采用的是一种事件驱动的模式,当HTMLParse ...
- logging模块介绍
在我们的实际开发过程中,我们有时候需要记录一些重要操作,或者程序运行情况,我们就需要在程序里面写入日志,来达到更快的排错跟记录重要操作的目的.在Python中logging模块就很好的解决了这个问题, ...
- HDU 6070 Dirt Ratio(线段树)
Dirt Ratio Time Limit: 18000/9000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)Tot ...
- Centos7搭建SVN Server手记
安装svn和依赖模块 yum install httpd httpd-devel subversion mod_dav_svn mod_auth_mysql 配置和使用 mkdir -p /opt/s ...
- hdu 3547 (polya定理 + 小高精)
DIY CubeTime Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Sub ...
- 【动态规划】 Codeforces Round #416 (Div. 2) C. Vladik and Memorable Trip
划分那个序列,没必要完全覆盖原序列.对于划分出来的每个序列,对于某个值v,要么全都在该序列,要么全都不在该序列. 一个序列的价值是所有不同的值的异或和.整个的价值是所有划分出来的序列的价值之和. ...
- es进行聚合操作时提示Fielddata is disabled on text fields by default
在进行派粗前,先执行以下操作 { "properties": { "updatedate": { "type": "text&qu ...