0%

加密算法总结

前言

本文主要总结了常用的一些加密算法,对称加密算法和非对称加密算法以及数字签名

对称加密和非对称加密

  • 对称加密算法:该算法又称为私钥加密、共享密钥加密。主要是加密和解密都用同一个密钥进行。一旦密钥落入别人的手中,该算法就被破解了。主要的加密算法有DES算法、Blowfish算法、RC5算法和IDEA算法。其示例如图所示,
    encrypt-symmetric-key.jpg

  • 非对称加密算法:该算法又叫公开密钥加密算法。该算法需要两个密钥,一个公钥,一个私钥。公钥用做加密,私钥用做解密。使用公钥加密后得到的密文,只有相对应的私钥才能解密得到原来的明文。公钥可以公开,可任意向外发布;私钥不可以公开,必须由用户自行严格秘密保管,绝不透过任何途径向任何人提供,也不会透露给被信任的要通信的另一方。如果任何人使用公钥加密明文,得到的密文可以透过不安全的途径(如网络)发送,只有对应的私钥持有者才可以解密得到明文;其他人即使从网络上窃取到密文及加密公钥,也无法(在数以年计的合理时间内)解密得出明文。常见的算法有RSA算法等。其示例如图所示:
    encrypt-asymmetric-encryption.jpg

数字签名

通常我们使用公钥加密,用私钥解密。而在数字签名中,我们使用私钥加密(相当于生成签名),公钥解密(相当于验证签名)。签名方法:我们可以直接对消息进行签名(即使用私钥加密,此时加密的目的是为了签名,而不是保密),验证者用公钥正确解密消息,如果和原消息一致,则验证签名成功。但通常我们会对消息的散列值签名,因为通常散列值的长度远小于消息原文,使得签名(非对称加密)的效率大大提高。注意,计算消息的散列值不是数字签名的必要步骤。
数字签名.jpg

常见算法

MD5摘要算法

一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值。是不可逆的算法。

1
2
3
4
//使用apache的DigestUtils类来计算MD5
public static String getMD5(String str){
return DigestUtils.md5Hex(str.getBytes());
}

SHA算法

和MD5算法类似,SHA算法也是一种信息摘要算法,又名安全散列算法(Secure Hash Algorithm)。SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512。其Java实现如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import org.apache.commons.codec.digest.DigestUtils;

public class DigestService {

public String getSHA1(String str){
return DigestUtils.sha1Hex(str);
}

public String getSHA256(String str){
return DigestUtils.sha256Hex(str);
}

public String getSHA384(String str){
return DigestUtils.sha384Hex(str);
}

public String getSHA512(String str){
return DigestUtils.sha512Hex(str);
}

}
原创技术分享,您的支持将鼓励我继续创作。