Android:安全问题之加密算法
MD5 加密
MD5本质是一种散列函数,用以提供消息的完整性保护。
特点:
-
压缩性:任意长度的数据,算出的MD5值长度都是固定的;
-
容易计算:从原数据计算出MD5值很容易;
-
抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大的区别;
-
强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(及伪造数据)是非常困难的;
-
不可逆:MD5理论上是不可逆的(但是现在已经可以暴力**了)。
使用场景:
-
验证密码:只要算法不变,就能和服务器上的MD5匹配;
-
文件完整性的校验:当下载一个文件时,服务器返回的信息包括这个文件的md5,在本地下载完毕时进行md5加密,将两个md5值进行比较,如果一致则说明文件完整没有丢包现象
算法原理
- 填充:首先将输入信息的长度(bit)进行填充,使得对512求余的结果等于448。填充的方法是填充一个1和n个0。
- 记录信息长度:用64位来存储填充前信息长度。这64位加在第一步结果的后面,这样信息长度就变为N*512+448+64=(N+1)*512位。
- 装入标准的幻数:标准的幻数是(A=(01234567)16,B=(89ABCDEF)16,C=(FEDCBA98)16,D=(76543210)16)。如果在程序中定义应该是(A=0X67452301L,B=0XEFCDAB89L,C=0X98BADCFEL,D=0X10325476L)
- 四轮循环运算:循环的次数是分组的个数(N+1)。
对称加密算法
加密和解密都使用同一把秘钥,这种加密方法称为对称加密,也称为单**加密。简单理解为:加密解密都是同一把钥匙。凯撒密码就属于对称加密,他的字符偏移量即为秘钥。
常用算法: AES、DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK 等
加密原理: 对比特位进行操作,交换位置,异或等等
非对称加密算法
与对称加密算法不同,非对称加密算法需要两个**:公钥(publickey)和私钥(privatekey)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。因为加密和解密使用的是两个不同的**,所以这种算法叫作非对称加密算法。
简单理解为:加密和解密是不同的钥匙
常用算法: RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等,其中支付宝使用的就是RSA算法
加密原理: 质因数、欧拉函数、模反元素.原理很复杂,只需要知道内部是基于分解质因数和取模操作即可
总结
非对称加密一般不会单独拿来使用,他并不是为了取代对称加密而出现的,非对称加密速度比对称加密慢很多,极端情况下会慢1000 倍,所以一般不会用来加密大量数据,通常我们经常会将对称加密和非对称加密两种技术联合起来使用,例如用非对称加密来给称加密里的秘钥进行加密,即秘钥交换
秘钥交换
A 先得到 B 的公钥,然后 A 生成一个随机秘钥,例如13245768,之后 A 用 B 的公钥加密该秘钥,得到加密后的秘钥,例如dxs#[email protected],之后将该密文发给 B ,B 用自己的私钥解密得到123456,之后双方使用13245768 作为对称加密的秘钥通信。C 就算截获加密后的秘钥dxs#[email protected],自己也解不开,这样 A 、B 二人能通过对称加密进行通信。