在应用开发的过程中,客户端和移动端要频繁的进行数据传输,涉及到重要隐私信息的时候,就需要进行数据加密,,即使传输的过程中被截取,也不会信息泄漏。对于加密算法,不少开发者也早有耳闻,例如:Base64,MD5,RSA,AES,DES加密等等,今天就总结一下加密算法
对称加密和非对称加密
对称加密:
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。
对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off。
对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。
非对称加密:
非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人–银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。
目前最常用的非对称加密算法是RSA算法,是Rivest, Shamir, 和Adleman于1978年发明
对称加密和非对称加密
虽然非对称加密很安全,但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密使用的密钥用非对称加密,参考网上,看下面的一个例子:
- 铁头需要在银行的网站上做一笔交易,他的游览器生成了一个随机数作为对称密钥
- 铁头的游览器向银行请求非对称加密的公钥
- 银行将公钥发送给铁头
- 铁头用这个公钥将自己的对称密钥进行加密
- 铁头将加密后的对称密钥发送给银行
- 银行用非对称加密的私有密钥对这个对称密钥进行解密获取到铁头的对称密钥
- 铁头与银行可以使用对称密钥来对沟通的内容进行加密与解密了。
对称和非对称加密总结
- 对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高。
- 非对称加密使用了一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢。
- 解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。
非对称加密例子
- RSA(参考这里)
对称加密例子
- AES(参考这里)
- 项目中除了登陆,支付等接口采用rsa非对称加密,之外的采用aes对称加密
- 高级加密标准(英语:Advanced Encryption Standard,缩写:AES)
- 这个标准用来替代原先的DES
- DES(参考这里)
- DES加密算法出自IBM
- 近些年使用越来越少
- DES使用56位密钥,以现代计算能力,24小时内即可被破解。
- AES和DES对比
- AES安全性、效率、灵活性要高于DES
- 对称加密优先采用AES
其他加密
- MD5
特点:单向加密算法,是不可逆的一种的加密方式
压缩性:任意长度的数据,算出的MD5值长度都是固定的。
容易计算:从原数据计算出MD5值很容易。
抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
加大MD5安全性
- Base64
- 平时开发中遇见的各种数据加密方式,最终都会对加密后的二进制数据进行Base64编码,起到一种二次加密的效果
- 其实呢Base64从严格意义上来说的话不是一种加密算法,而是一种编码算法
- 更多
所以,在客户端和服务端数据传送加密,最多使用的是非对称RSA和对称AES,参考这里