梳理开发中常用的加密算法
1、加密种类:
1.1、不可逆加密:【Hash加密算法/散列算法/摘要算法】
- 一旦加密就不能反向解密得到密码原文,一般用来加密用户密码,app的服务器端数据库里一般存储的也都是加密后的用户密码。
- 在数据传输的过程中,首先把密码类数据经过MD5加密算法加密,然后再在外面使用可逆的加密方式加密一次,这样在数据传输的过程中,即便数据被截获了,但是想要完全破解,还是很难的。
- Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。
- 用途:一般用于效验下载文件正确性,一般在网站上下载文件都能见到;存储用户敏感信息,如密码、 卡号等不可解密的信息。
- 常见的不可逆加密算法有:MD5、SHA、HMAC
1.2、可逆加密:可逆加密有对称加密和非对称加密。
- 对称加密:【文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥】
- 在对称加密算法中,数据发信方将明文和加密密钥一起经过特殊的加密算法处理后,使其变成复杂的加密密文发送出去,收信方收到密文后,若想解读出原文,则需要使用加密时用的密钥以及相同加密算法的逆算法对密文进行解密,才能使其回复成可读明文。在对称加密算法中,使用的密钥只有一个,收发双方都使用这个密钥,这就需要解密方事先知道加密密钥。
- 对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
- 用途:一般用于保存用户手机号、身份证等敏感但能解密的信息。
- 常见的对称加密算法有AES、DES、3DES、Blowfish、IDEA、RC4、RC5、RC6
- 非对称加密:【两个密钥:公开密钥(publickey)和私有密钥,公有密钥加密,私有密钥解密】
- 非对称加密算法是一种密钥的保密方法。非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
- 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。
- 服务器存私钥,客户端拿公钥,客户端加解密算法可以做成so库。
- 非对称加密与对称加密相比,其安全性更好;非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
- 用途:一般用于签名和认证。
- 常见的非对称加密算法有:RSA、DSA(数字签名用)、ECC(移动设备用)、Diffie-Hellman、El Gamal
2、Android开发中一般的加密应用:
- 密码类数据:为了让用户放心注册,密码类的数据的加密一般都是经过双重加密的,第一重加密使用不可逆的MD5算法加密,第二重加密是可逆的加密。
- 非密码类的数据:非密码类的数据,虽然这些数据也很重要,但是一般其他人截获了这些数据对他们意义不太大,这些数据我们一般采用可逆的加密方式加密,因为我们在服务器端还是需要这些数据的明文的,常用的可逆加密方法有:对称加密和非对称加密。
- 图片缓存key:一般用图片的url地址加上token之类的,再用md5进行不可逆加密,以确保每张图片的key都具有唯一性,并且是合法字符。
3、一般保证数据传输的安全性措施:
- 使用HTTP协议可以使用非对称加密,服务器存私钥,客户端拿公钥,客户端加解密算法可以做成so库,加大被破解难度。
- 给协议加上时间戳等特定参数提交服务器做校验,HTTP协议头也可以做相关安全参数设定,这个得服务器和客户端商定方案了。
- 使用HTTPS协议通讯,HTTPS是协议通道加密,会更直接,更全局性。
4、注意点:
- Base64编码:Base64只是一种编码方式,不算加密方法。Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’,因此编码后输出的文本末尾可能会出现1或2个’=’。