APP开发实战40-MD5介绍
来源:互联网 发布:怎么上传源码到空间 编辑:程序博客网 时间:2024/05/21 17:17
12 加密介绍
12.1MD5简介
MD5即Message-Digest Algorithm5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法)。MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。
MD5算法具有以下特点:
(1)根据最终输出的值,无法得到原始的明文,即过程是不可逆的。
(2)任意长度的数据,算出的MD5值长度都是固定的。
Java提供了MD5加密的库,如下所示是对数据进行MD5加密处理的代码:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
private String makeMD5Hash(String key) {
String cacheKey;
try {
final MessageDigestmDigest = MessageDigest.getInstance("MD5");
mDigest.reset();
mDigest.update(key.getBytes());
cacheKey = bytesToHexString(mDigest.digest());
} catch (NoSuchAlgorithmExceptione) {
cacheKey = String.valueOf(key.hashCode());
}
return cacheKey;
}
private String bytesToHexString(byte[]bytes) {
StringBuilder sb = new StringBuilder();
for (bytevalue : bytes) {
String hex = Integer.toHexString(0xFF &value);
if (hex.length()== 1){
sb.append('0');
}
sb.append(hex);
}
return sb.toString();
}
MD5主要用于需要对原始数据加密,但数据的使用方又不需要知道原始数据的场景,而且还可用于数据完整性校验:
(1)对登录密码进行加密
如用户使用APP注册的时候,APP把用户输入的密码进行MD5 Hash运算,然后发送给服务器保存。用户使用APP登录的时候,服务器把从APP接收到的MD5值和保存的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,服务器在并不知道用户密码的明码的情况下就可以确定用户登录的合法性。这可以避免用户的密码被具有系统管理员权限的人员知道。
(2)对文件名进行加密
在使用APP的时候,常需要在本地缓存一些文件,可以使用MD5对这些文件名进行加密,防止通过文件名了解文件的相关信息。
(3)数据完整性的校验
常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于下载该软件后,对下载的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保获得的文件与该站点提供的文件为同一文件。
具体来说文件的MD5值就像是这个文件的“数字指纹”。每个文件的MD5值是不同的,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”就会发生变化。比如下载服务器针对一个文件预先提供一个MD5值,用户下载完该文件后,用算法重新计算下载文件的MD5值,通过比较这两个值是否相同,就能判断下载的文件是否出错,或者说下载的文件是否被篡改了。
为了增加解密的难度,有时会采用加盐的方式,就是在明文数据中加入一个随机字符串,如当前操作的时间字符串,然后再用MD5算法加密。
- APP开发实战40-MD5介绍
- APP开发实战15-字符编码介绍
- APP开发实战34-HTTPS介绍
- APP开发实战38-Cookie介绍
- APP开发实战39-Session介绍
- APP开发实战41-对称加密介绍
- APP开发实战77-ContentProvider介绍
- APP开发实战89-位图介绍
- APP开发实战90-矢量图介绍
- APP开发实战111-ProGuard指令介绍
- APP开发实战131-Git工具介绍
- APP开发实战132-Git命令介绍
- APP开发实战163-JobScheduler介绍
- APP开发实战130-APP三方服务介绍
- APP开发实战29-HTTP头字段介绍
- APP开发实战30-HTTP头字段介绍2
- APP开发实战32-HTTP Keep-Alive模式介绍
- APP开发实战42-非对称加密介绍
- Android创建文件与备份文件
- JSTL中格式化日期
- CentOS下安装UNRAR
- JSP九种内置对象
- 信号量机制解决生产者--消费者问题
- APP开发实战40-MD5介绍
- Uva 103 Stacking Boxes
- 单片机学习笔记(四)——中断
- 自定义dialog
- echarts柱状图显示数值
- 编程实现计算FIRST集和FOLLOW集C++之(三)处理候选式:把空加入非终结符的First集
- python web框架cherrypy小demo
- Visual Studio发布应用未能创建默认证书的问题解决方法
- java String