常见安全算法(MD5、SHA1、Base64等等)总结
本文主要对消息摘要算法和加密算法做了整理,包括MD5、SHA、DES、AES、RSA等,并且提供了相应算法的Java实现和测试。
一 消息摘要算法
1. 简介:
- 消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密
- 只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。
- 消息摘要算法主要应用在“数字签名”领域,作为对明文的摘要算法。
- 著名的摘要算法有RSA公司的MD5算法和SHA-1算法及其大量的变体。
2. 特点:
- 无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。
- 消息摘要看起来是“伪随机的”。也就是说对相同的信息求摘要结果相同。
- 消息轻微改变生成的摘要变化会很大
- 只能进行正向的信息摘要,而无法从摘要中恢复出任何的消息,甚至根本就找不到任何与原信息相关的信息
3. 应用:
消息摘要算法最常用的场景就是数字签名以及数据(密码)加密了。(一般平时做项目用的比较多的就是使用MD5对用户密码进行加密)
4. 何谓数字签名:
数字签名主要用到了非对称密钥加密技术与数字摘要技术。数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。
如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过.
因此数字签名能够验证信息的完整性。
数字签名是个加密的过程,数字签名验证是个解密的过程。
5. 常见消息/数字摘要算法:
MD5:
简介:
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式
(也就是把一个任意长度的字节串变换成一定长的十六进制数字串)。
特点:
- 压缩性: 任意长度的数据,算出的MD5值长度都是固定的。
- 容易计算: 从原数据计算出MD5值很容易。
- 抗修改性: 对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
- 强抗碰撞: 已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
代码实现:
利用JDK提供java.security.MessageDigest类实现MD5算法:
package com.snailclimb.ks.securityAlgorithm; |
结果:
6bab82679914f7cb480a120b532ffa80 |
注意MessageDigest类的几个方法:
static MessageDigest getInstance(String algorithm)//返回实现指定摘要算法的MessageDigest对象 |
byte[] digest(byte[] input)//使用指定的字节数组对摘要执行最终更新,然后完成摘要计算。 |
不利用Java提供的java.security.MessageDigest类实现MD5算法:
package com.snailclimb.ks.securityAlgorithm; |
SHA1:
对于长度小于2^64位的消息,SHA1会产生一个160位(40个字符)的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。
SHA1有如下特性:
- 不可以从消息摘要中复原信息;
- 两个不同的消息不会产生同样的消息摘要,(但会有1x10 ^ 48分之一的机率出现相同的消息摘要,一般使用时忽略)。
代码实现:
*利用JDK提供java.security.MessageDigest类实现SHA1算法:
package com.snailclimb.ks.securityAlgorithm; |
结果:
8ce764110a42da9b08504b20e26b19c9e3382414 |
二 加密算法
1. 简介:
- 加密技术包括两个元素:加密算法和密钥。
- 加密算法是将普通的文本(或者可以理解的信息)与一串数字(密钥)的结合,产生不可理解的密文的步骤。
- 密钥是用来对数据进行编码和解码的一种算法。
- 在安全保密中,可通过适当的密钥加密技术和管理机制来保证网络的信息通讯安全。
2. 分类:
密钥加密技术的密码体制分为对称密钥体制和非对称密钥体制两种。相应地,对数据加密的技术分为两类,即对称加密(私人密钥加密)和非对称加密(公开密钥加密)。
对称加密以数据加密标准(DES,Data Encryption Standard)算法为典型代表,非对称加密通常以RSA(Rivest Shamir Adleman)算法为代表。
对称加密的加密密钥和解密密钥相同。非对称加密的加密密钥和解密密钥不同,加密密钥可以公开而解密密钥需要保密
3. 应用:
常被用在电子商务或者其他需要保证网络传输安全的范围。
4. 对称加密:
加密密钥和解密密钥相同的加密算法。
对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),
另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,而且对计算机功能要求也没有那么高。IDEA加密标准由PGP(Pretty Good Privacy)系统使用。
DES:
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,现在已经过时。
代码实现:
DES算法实现 :
package com.snailclimb.ks.securityAlgorithm; |
结果:
加密后:[B@50cbc42f |
IDEA:
- 这种算法是在DES算法的基础上发展出来的,类似于三重DES。
- 发展IDEA也是因为感到DES具有密钥太短等缺点。
- DEA的密钥为128位,这么长的密钥在今后若干年内应该是安全的。
- 在实际项目中用到的很少了解即可。
代码实现:
IDEA算法实现
package com.snailclimb.ks.securityAlgorithm; |
5. 非对称加密:
- 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥 (privatekey)。
- 公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;
- 如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
- 因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
RAS:
RSA是目前最有影响力和最常用的公钥加密算法。它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
代码实现:
RAS算法实现:
package com.snailclimb.ks.securityAlgorithm; |
结果:
{RSAPublicKey=Sun RSA public key, 1024 bits |