简介

消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,即单向加密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。

消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络上使用。由于其加密计算的工作量相当巨大,所以以前的这种算法通常只用于数据量有限的情况下的加密,例如计算机的口令就是用不可逆加密算法加密的


用途

一般地,把对一个信息的摘要称为该消息的指纹或数字签名,数字签名是保证信息的完整性和不可否认性的方法。消息摘要算法适合作为数字签名算法,也是数字签名的核心算法。


分类

MD(Message Digest,消息摘要)

SHA(Secure Hash Algorithm,安全散列算法)

MAC(Message Authentication Code,消息认证码)

……


MD

MD算法包括MD2、MD4和MD5,摘要长度都是128位,都是单向加密,其中JDK自带MD2和MD5。

MD5的 java 实现

public class MyMD5 {
public static void main(String[] args) {
String str = "i am guo feng"; try {
//获取MD5算法实例
MessageDigest md = MessageDigest.getInstance("MD5");
//传入需要计算的字符串更新摘要信息
md.update(str.getBytes());
//获得摘要
//BigInteger函数则将8位的字符串转换成16位hex值,
//用字符串形式表示hash值。
String result = new BigInteger(1, md.digest()).toString(16);
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

输出:

364620d83dfd1e22936d6e9792068b67
  • 1

MD5 的应用场景

经典的使用时序图如下:

系统用户注册: 

系统用户登录: 

当数据库受到攻击时,泄漏的密码是MD5加密的,对用户和公司也没有什么损失。


SHA

安全散列算法包括SHA-1,SHA-2,其中SHA-2是SHA-224、SHA-256、SHA-384、SHA-512的统称。

安全散列算法同MD一样,也是固定长度摘要。SHA-1的摘要长度是160,SHA-2的摘要长度是每个名称的后面标识数字。

SHA-1的java实现:

public class MySHA {
public static void main(String[] args) {
String str = "i am guo feng"; try {
//获取算法实例
MessageDigest md = MessageDigest.getInstance("SHA");
//传入需要计算的字符串更新摘要信息
md.update(str.getBytes());
//获得摘要
//BigInteger函数则将8位的字符串转换成16位hex值,用字符串形式表示hash值。
String result = new BigInteger(1, md.digest()).toString(16);
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

输出:

f23bf780967813dd28e3af23a8960821db415791
  • 1

SHA 的应用场景

最容易看得到的是,打开计算机浏览器的管理证书,例如我的360极速浏览器的证书,点开一个证书,可以看到指纹算法 sha1 和指纹:

经典的使用时序图如下:

 
消息鉴别是指:在接收方将原始消息使用公布的摘要算法进行摘要,然后把摘要结果和接收的摘要消息进行比对,从而进行处理。

大部分发送方以“原始消息+Key+时间戳”的类似格式进行摘要处理,然后发送。


版权声明:本文为博主原创文章,转载请标明地址。 https://blog.csdn.net/plain_maple/article/details/57085775

java 加密之消息摘要算法的更多相关文章

  1. java学习-MD5消息摘要算法

    md5 属于hash算法一类,是不可逆的消息摘要算法.与对称加密和非对称加密算法不一样,不需要加密密钥. 注意: md5不是加密算法,只是将数据进行散列计算后生成一个唯一值的算法,没有加密密钥也没有解 ...

  2. JAVA加解密 -- 消息摘要算法

    消息摘要算法是一种单向加密算法 主要用于验证数据完整性,也是数字签名的核心算法 消息鉴别:指在接收方将原始信息进行摘要,然后与接收到的摘要信息进行对比 a.MD家族 – MD5(128位摘要信息) M ...

  3. password学4——Java 加密解密之消息摘要算法(MD5 SHA MAC)

    Java 加密解密之消息摘要算法(MD5 SHA MAC) 消息摘要 消息摘要(Message Digest)又称为数字摘要(Digital Digest). 它是一个唯一相应一个消息或文本的固定长度 ...

  4. Java加密与解密笔记(一) Base64和数据摘要算法

    对加密解密下面的内容一定要先理解: 甲乙双方要通信,中间的连接可能被人窃听甚至篡改.解决办法就是把传输的内容进行加密,用密文去传输,这样即使被监听也没办法知道信息的具体内容. 加密时,甲乙双方可以约定 ...

  5. HMAC加密的消息摘要码

    HMAC(Hash Message Authentication Code)哈希消息授权码,它在消息摘要算法(例如MD5,SHA系列算法)的基础上,使用密钥对消息摘要进行加密.它相当于一个马甲,内里可 ...

  6. 信息加密之消息摘要算法的MAC

    MAC是消息摘要算法的第三种实现方式,另外两种方式分别为:MD2\4\5.SHA. MAC的jdk实现:1.默认密钥方式 private static void MAC_JDK(){ try { Ke ...

  7. Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC

    Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha     加密解密,曾经是我一 ...

  8. MD5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)

    MD5 编辑 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321( ...

  9. cooking java ——加密解密

    java安全与密码概述 主要分为三部分: 密码学基础,包括:相关术语:分类:常用安全体系. java的安全组成:jdk以及第三方扩展. 相关实现代码,包括:base64.MD5········ 密码学 ...

随机推荐

  1. solr学习笔记-linux下配置solr(转)

    本文地址: http://zhoujianghai.iteye.com/blog/1540176 首先介绍一下solr: Apache Solr (读音: SOLer) 是一个开源.高性能.采用Jav ...

  2. 新版本读取老版本文件崩溃BUG

    读取文件匹配代码 BOOL CWBPage::LoadFromFile(CFile *pFile, LONGLONG& lOff, ULONGLONG lFileLength) { if (p ...

  3. JS-对象查找父级

    之前在寻找两个以上的父级,一直傻傻的用parent().parent()... 今天,需要写五个,当然以前也是写过五个的,但是今天总想着换个简单的方式,至少不要.parent().parent().p ...

  4. 谷歌Volley网络框架讲解——HttpStack及其实现类

    前两篇已经对网络请求流程已经梳理了个大概,这次我们着重看一下HttpStack和它的其实现类.我们之前在Network篇讲过它仅有一个实现类,而今天我们讲的HttpStack有两个实现类. 其中Htt ...

  5. PropertyPlaceholderConfigurer读取配置文件

    1. PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现,也就是 BeanFactoryPostProcessor接口的一个实现.PropertyPlaceho ...

  6. sencha touch 入门系列 (八)sencha touch类系统讲解(下)

    接着上一讲,我们通过一组代码来讲解一下st的类的一些属性: Ext.define("MyConfig",{ config:{ website:"http://127.0. ...

  7. for update 和 t.rowid的区别

    select * from table_name for update; 和 select t.*, t.rowid from table_name t 的区别 前者会对你查询出来的结果加上锁,而后者 ...

  8. js里面return 和 return false的区别

    js里面return 和 return false的区别 1.都可以终止执行当前方法: 2.如果方法A调用了方法B,则在方法A中使用return可以终止程序,但是在方法B中使用return则终止执行B ...

  9. docker 2375 vulnerability and self-signatuer certifications

    Docker暴露2375端口,引起安全漏洞 今天有小伙伴发现Docker暴露出2375端口,引起了安全漏洞.我现在给大家介绍整个事情的来龙去脉,并告诉小伙伴们,怎么修复这个漏洞. 为了实现集群管理,D ...

  10. Team Formation---zoj3870(异或)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5518 题意就是有n个数,如果满足a^b > MAX(a, b) ...