AES

AES = Advanced Encryption Standard,正式诞生于2002年,是目前最流行的对称加密算法之一

AES128,AES256就是采用128/256位秘钥进行AES加密

对称加密的意思就是自始至终只有一个密钥,由这个密钥加密的数据只能由这个密钥才能快速解密,否则强行破解非常耗时。

RSA

RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的,RSA就由是他们三个人名字的首字母组成的。RSA是一种非对称加密,简单来说,就是RSA加密时每次使用一对秘钥(假设为A和B),公布在外的为公钥,只由自己持有的为私钥,公钥和私钥在加密算法中没有高低之分,把A公布出去,那么A就是公钥,如果把B公布出去,那么B就是公钥(但是在实际使用中好像是有区别的,每次生成的私钥长度总比公钥长度长很多)。公钥加密的数据只有私钥才能快速解密,私钥加密的数据只有公钥才能快速解密(正是由于公钥加密的数据不能用公钥解密,才会把公钥公开,否则“加密”就成了笑话),即由一对秘钥中的一条秘钥加密的数据,只能由另一条秘钥解密。

相比于AES,RSA在相同秘钥长度的情况下加密强度要低很多。为了保证加密强度,一般使用的RSA秘钥的长度要比AES长得多(1024~3000多位),而且随着加密强度的提高,RSA秘钥长度增长很快。

保密级别

对称密钥长度(bit)

RSA密钥长度(bit)

ECC密钥长度(bit)

保密年限

80

80

1024

160

2010

112

112

2048

224

2030

128

128

3072

256

2040

192

192

7680

384

2080

256

256

15360

512

2120

RSA加密依赖于一个数学问题:对一个由两个质数相乘组成的极大数进行因数分解很困难。具体算法我没有看懂,但是可以很简单的得到一个结论,如果以后发明了对大数进行快速因式分解的算法,RSA加密的强度就会急速降低,变得不再安全。

RSA的使用一般有两种情景:

1.数据加密。接收者生成一对RSA秘钥,将公钥发布出去,信息发布者使用公钥将数据加密,然后发送给接收者,数据发送期间不必担心数据泄露,因为监听者不知道私钥,不能解密数据。

2.数据签名。数据发布者生成一对RSA密钥,将公钥发布出去,然后使用私钥将数据加密,再把数据公布出去。数据发布者使用公钥将数据解密,就可以得到原文,而且不用担心数据被人篡改,因为只要接收者使用正确的公钥解密数据,被篡改过的数据是无法解密成功的,只有经过私钥加密的“原版”数据才能用公钥解密,而私钥只掌握在数据真正的发布者手里。

RSA和AES加密一般配合使用。我现在工作的手机银行客户端的使用场景如下:

  1. 客户端先使用AES加密数据原文,再用服务器端公布的RSA公钥加密AES密钥,将这两段数据一起发送给服务器端
  2. .服务器端拿到数据后,先用自己的RSA私钥解密被RSA加密的AES密钥,得到真正的AES密钥,再用真正的AES密钥解密被AES密钥加密的数据密文,得到原文。