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位的随机密码.让用户再去修改 ...
随机推荐
- JAVA二叉树的创建以及各种功能的实现
直接上代码了,代码说得很清楚了 package BTree; public class BTree { private Node root; private class Node { private ...
- HDR文件格式简介及其读写函数
转自:http://blog.csdn.net/lqhbupt/article/details/7828827 1.HDR简介HDR的全称是High-DynamicRange(高动态范围).在此,我们 ...
- 解决Django在mariadb创建的表插入中文乱码的问题
1.确保你的mariadb数据库的character_set_connection.character_set_database.character_set_server的编码均为utf8 Maria ...
- 开源IDS系列--【2015】获取snort vrt 规则(talo)
1.在snort网站注册 2.注册成功后,会在个人信息中生成:Oinkcode 3.https://www.snort.org/rules/snortrules-snapshot-2973.tar.g ...
- PHP的命名空间namespace
对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...
- es6 Object的几个新方法
扩展对象 Object.preventExtensions Object.isExtensible 密封对象 Object.seal Object.isSealed 冻结对象 Object.freez ...
- JZYZOJ1524 [haoi2012]外星人 欧拉函数
http://172.20.6.3/Problem_Show.asp?id=1524 大概可以算一个结论吧,欧拉函数在迭代的时候,每次迭代之后消去一个2,每个非2的质因子迭代一次又(相当于)生成一个2 ...
- UNIX域套接字连接mysql
用户可以在配置文件中指定套接字文件的路径,如--socket=/data/mysql/mysql.sock [root@localhost ~]# mysql -uroot -p123456 -S / ...
- (Mark)Myeclipse10.6 下怎么安装Jad插件
Jad是java的反编译工具,是命令行执行,反编译出来的源文件可读性较高.可惜用起来不太方便.还好找到eclipse下的插件,叫jadclipse,安装好之后,只要双击.class文件,就能直接看源文 ...
- NHibernate 之持久化类、拦截器 (第二篇)
一.持久化类中成员标量的要求 作为被NHibernate使用的持久化类,必须满足以下几点要求: 1.声明读写属性 在NHibernate的使用中,持久化类的成员变量必须声明对应的属性,NHiberna ...