java 加密之消息摘要算法
简介
消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,即单向加密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。
消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络上使用。由于其加密计算的工作量相当巨大,所以以前的这种算法通常只用于数据量有限的情况下的加密,例如计算机的口令就是用不可逆加密算法加密的
用途
一般地,把对一个信息的摘要称为该消息的指纹或数字签名,数字签名是保证信息的完整性和不可否认性的方法。消息摘要算法适合作为数字签名算法,也是数字签名的核心算法。
分类
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+时间戳”的类似格式进行摘要处理,然后发送。
java 加密之消息摘要算法的更多相关文章
- java学习-MD5消息摘要算法
md5 属于hash算法一类,是不可逆的消息摘要算法.与对称加密和非对称加密算法不一样,不需要加密密钥. 注意: md5不是加密算法,只是将数据进行散列计算后生成一个唯一值的算法,没有加密密钥也没有解 ...
- JAVA加解密 -- 消息摘要算法
消息摘要算法是一种单向加密算法 主要用于验证数据完整性,也是数字签名的核心算法 消息鉴别:指在接收方将原始信息进行摘要,然后与接收到的摘要信息进行对比 a.MD家族 – MD5(128位摘要信息) M ...
- password学4——Java 加密解密之消息摘要算法(MD5 SHA MAC)
Java 加密解密之消息摘要算法(MD5 SHA MAC) 消息摘要 消息摘要(Message Digest)又称为数字摘要(Digital Digest). 它是一个唯一相应一个消息或文本的固定长度 ...
- Java加密与解密笔记(一) Base64和数据摘要算法
对加密解密下面的内容一定要先理解: 甲乙双方要通信,中间的连接可能被人窃听甚至篡改.解决办法就是把传输的内容进行加密,用密文去传输,这样即使被监听也没办法知道信息的具体内容. 加密时,甲乙双方可以约定 ...
- HMAC加密的消息摘要码
HMAC(Hash Message Authentication Code)哈希消息授权码,它在消息摘要算法(例如MD5,SHA系列算法)的基础上,使用密钥对消息摘要进行加密.它相当于一个马甲,内里可 ...
- 信息加密之消息摘要算法的MAC
MAC是消息摘要算法的第三种实现方式,另外两种方式分别为:MD2\4\5.SHA. MAC的jdk实现:1.默认密钥方式 private static void MAC_JDK(){ try { Ke ...
- Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC
Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha 加密解密,曾经是我一 ...
- MD5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)
MD5 编辑 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321( ...
- cooking java ——加密解密
java安全与密码概述 主要分为三部分: 密码学基础,包括:相关术语:分类:常用安全体系. java的安全组成:jdk以及第三方扩展. 相关实现代码,包括:base64.MD5········ 密码学 ...
随机推荐
- Python cookielib 模块
什么是 cookie : 指某些网站为了辨别用户身份,进行 session 跟踪而储存在用户本地终端上的数据,通常以 txt 文件形式存储.比如你登录了淘宝,浏览器就会保存 cookie 信息,这样我 ...
- mac 类似Xshell
ssh -t root@12.23.34.45 -p 22 ssh -t 用户名@IP地址 -p 端口
- VIM 多行注释与取消
注释: 在使用vim的过程中, 注释是一个比较烦人的事情,要一行一行注释,或者用/* */来注释 下面这种方法可以快捷的进行多行注释. 1.进入vi/vim编辑器,按CTRL+V进入可视化模式(VIS ...
- 网络虚拟化技术(一): Linux网络虚拟化
创建虚拟网络环境 使用命令 $ ip netns add net0 可以创建一个完全隔离的新网络环境,这个环境包括一个独立的网卡空间,路由表,ARP表,ip地址表,iptables,ebtables, ...
- synchronized同步语句块
用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个长时间的任务,那么B线程则必须等待比较长时间.在这样的情况下可以使用synchronized同步语句块来解 ...
- LeetCode——Min Stack
Description: Design a stack that supports push, pop, top, and retrieving the minimum element in cons ...
- ajax操作的链式写法
ajax操作的传统写法: $.ajax({ url: url, success: function(){ doWhenSuccess(); }, error: function(){ doWhenEr ...
- WEB安全番外第二篇--明日之星介绍HTML5安全问题介绍
一.CORS领域问题: 1.CORS的介绍请参考:跨域资源共享简介 2.HTML5中的XHR2级调用可以打开一个socket连接,发送HTTP请求,有趣的是,上传文件这里恰恰是multi-part/f ...
- TextureMerger1.6.6 三:Bitmap Font的制作和使用
BitmapFont主要用于特殊字体在游戏中的使用. 比如我想使用方正剪纸字体,但是没加载方正剪纸.ttf字体时,egret是没法使用这种字体的. 或者美工制作了效果拔群的0123456789数字字体 ...
- python 多线程ping大量服务器在线情况
需要ping一个网段所有机器的在线情况,shell脚步运行时间太长,用python写个多线程ping吧,代码如下: #!/usr/bin/python #coding=utf-8 ''' Create ...