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加密一般配合使用。我现在工作的手机银行客户端的使用场景如下:
- 客户端先使用AES加密数据原文,再用服务器端公布的RSA公钥加密AES密钥,将这两段数据一起发送给服务器端
- .服务器端拿到数据后,先用自己的RSA私钥解密被RSA加密的AES密钥,得到真正的AES密钥,再用真正的AES密钥解密被AES密钥加密的数据密文,得到原文。