MessageDigest消息摘要
<1>MessageDigest基础
MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。
MessageDigest 对象开始被初始化。该对象通过使用 update()方法处理数据。任何时候都可以调用 reset()方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用digest() 方法之一完成哈希计算。
对于给定数量的更新数据,digest 方法只能被调用一次。在调用 digest 之后,MessageDigest 对象被重新设置成其初始状态。
1、public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
返回实现指定摘要算法的 MessageDigest 对象。
algorithm - 所请求算法的名称
2、public static MessageDigest getInstance(String algorithm,String provider)throws NoSuchAlgorithmException,NoSuchProviderException
返回实现指定摘要算法的 MessageDigest 对象。
algorithm - 所请求算法的名称
provider - 提供者的名称。
3、public void update(byte[] input)
使用指定的 byte 数组更新摘要。
4、public byte[] digest()
通过执行诸如填充之类的最终操作完成哈希计算。在调用此方法之后,摘要被重置。
5、public static boolean isEqual(byte[] digesta, byte[] digestb)
- 比较两个摘要的相等性。做简单的字节比较。
-
注意:Provider可以通过 Java.security.
Security.getProviders()方法获取已注册提供者列表。比较常用的有“SUN”SUN提供的常用的算法名称有:
MD2
MD5
SHA-1
SHA-256
SHA-384
SHA-512举例说明:
/**
* 将一个字符串进行MD5算法,获取摘要
* @param str
* @return
*/
public static String md5Hex(String str){
byte[] data = str.getBytes();
try {
//获取指定算法的MessageDigest对象
MessageDigest digest = MessageDigest.getInstance("MD5");
//更新摘要
digest.update(data);
//获取经过摘要算法后的摘要字节数组
byte[] messageDigest = digest.digest();
StringBuffer hexString = new StringBuffer();
//将经摘要算法的字节数组装换成十六进制的字符串
for(byte b : messageDigest){
String hex = Integer.toHexString(b & 0xff);
if(hex.length()<2){ //长度小于2,转换时需加上一个0,构成两位格式
hexString.append(0);
}
hexString.append(hex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}<二> MessageDigest高级应用
(1)MessageDigest对文件进行摘要计算
/**
* 获取文件信息摘要计算
* @param in
* @return
* @throws IOException
* @throws NoSuchAlgorithmException
*/
public static String fileResume(InputStream in) throws IOException, NoSuchAlgorithmException{
MessageDigest digest = MessageDigest.getInstance("MD5"); byte[] buf = new byte[1024];
int len = 0;
while((len = in.read(buf))!=-1){
//每次更新缓冲中的字节摘要
digest.update(buf,0,len);
}
byte[] data = digest.digest();
//获取经过摘要算法后的摘要字节数组
byte[] messageDigest = digest.digest();
StringBuffer hexString = new StringBuffer();
//将经摘要算法的字节数组装换成十六进制的字符串
for(byte b : messageDigest){
String hex = Integer.toHexString(b & 0xff);
if(hex.length()<2){ //长度小于2,转换时需加上一个0,构成两位格式
hexString.append(0);
}
hexString.append(hex);
}
return hexString.toString();
}(2)第三方jar包
commons-codec 提供了便捷的MD5工具类, 可以简化消息摘要计算:
引入jar包后,直接调用
DigestUtil.DigestUtils.md5Hex(String str) 获取字符串的MD5信息摘要
DigestUtils.sha1Hex(String str) 获取字符串的SHA-1信息摘要
DigestUtils.md5Hex(InputStream in) 获取输入流的MD5信息摘要
<三>MD5原理
MessageDigest消息摘要的更多相关文章
- 使用JDK自带的MessageDigest计算消息摘要
使用JDK自带的MessageDigest计算消息摘要 上代码 /** * 使用JDK自带MessageDigest */ public class MessageDigestUtils { /** ...
- 消息摘要java.security.MessageDigest
这是一种与消息认证码结合使用以确保消息完整性的技术.主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4.MD5.SHA-1,jdk1.5对 ...
- Java 消息摘要 散列 MD5 SHA
package xxx.common.util; import java.math.BigInteger; import java.security.MessageDigest; import jav ...
- [Java 安全]消息摘要与数字签名
消息摘要 算法简述 定义 它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生.如果消息在途中改变了,则接收者通过对收到消息的新产生的摘要与原摘要比较,就可知 ...
- HMAC加密的消息摘要码
HMAC(Hash Message Authentication Code)哈希消息授权码,它在消息摘要算法(例如MD5,SHA系列算法)的基础上,使用密钥对消息摘要进行加密.它相当于一个马甲,内里可 ...
- java中的数据加密1 消息摘要
消息摘要(Message Digest) 又称为数字摘要(Digital Digest).它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生.如果消息在途中 ...
- 基于HTTP在互联网传输敏感数据的消息摘要、签名与加密方案
基于HTTP在互联网传输敏感数据的消息摘要.签名与加密方案 博客分类: 信息安全 Java 签名加密AESMD5HTTPS 一.关键词 HTTP,HTTPS,AES,SHA-1,MD5,消息摘要,数 ...
- SHA_1计算消息摘要
/** * SHA_1计算消息摘要 * @param bytes 待计算数据 * @return */ public static String SHA_1(byte[] bytes) { Strin ...
- 消息摘要技术(MD5)
1.使用消息摘要技术对密码加密 数据库存储的是经过消息摘要技术加密之后的信息, 避免保存密码明文,提升了系统安全性 必要性说明: 如果存储明文密码,数据库系统管理员和攻破系统的黑客是可以拿到你的所有信 ...
随机推荐
- 来自 Thoughtram 的 Angular 2 系列资料
Angular 2 已经正式 Release 了,Thoughtram 已经发布了一系列的文档,对 Angular 2 的各个方面进行深入的阐释和说明. 我计划逐渐将这个系列翻译出来,以便对大家学习 ...
- 迁移学习( Transfer Learning )
在传统的机器学习的框架下,学习的任务就是在给定充分训练数据的基础上来学习一个分类模型:然后利用这个学习到的模型来对测试文档进行分类与预测.然而,我们看到机器学习算法在当前的Web挖掘研究中存在着一个关 ...
- URL特殊字符的转义
+ 转义符为 %2B 空格 转义符为 + 或 %20 / 转义符为 %2F ? 转义符为 %3F % 转义符为 %25 # 转义符为 %23 & 转义符为 %26 = 转义符为 %3D
- 数据库——JDBC
数据库--JDBC 数据库优点:降低存储数据的冗余度: 更高的数据一致性: 存储的数据可以共享: 可以建立数据库所遵循的标准: 便于维护数据完整性: 能够实现数据的安全性: 建立数据库: 数据库的存储 ...
- 《循序渐进》之简单的DHCP实验
目的:初学,配置简单的DHCP试验. 试验步骤: 1:拓扑图 2:配置: Router>en Router#config t Enter configuration commands, one ...
- Web APi之安装配置实现Cors跨域
参考:http://www.cnblogs.com/CreateMyself/p/4836628.html 1.通过NuGet下载程序包,搜索程序包[Microsoft.AspNet.WebApi.C ...
- asp.net的JSONHelper 类
调用方法: ){ jsons = json.ToString();}else{ jsons = @"{success:false}";}return jsons; JS ...
- 用CMake设置Visual Studio工程中预处理器定义值
构建VS工程时预处理值是不可缺少的,如动态库的导出配置等.在通过CMake构建VS工程时,可以通过CMake命令进行定义,下面讲三种应用. 字符集:默认装填下VS工程是多字节字符集,如果需要使用Uni ...
- 通过innobackupex实现对MySQL的增量备份与还原
备份 增量备份是基于完整备份的,所以我们需要先做一次完整备份: innobackupex --password=test /backup/ 备注:test是我的MySQL服务的root用户的密码,/b ...
- nginx的优化
Nginx 优化 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为"engine X",是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/P ...
