数据加密

2/22/2017来源:ASP.NET技巧人气:3097

数据加密

      今天我们来讲一下安卓中的数据加密,那么一讲到数据加密,大家首先想到的可能是md5,还有的可能会想到我们在百度地图那天用到的SHA1码.其实除了这两种,还有其他的加密方式,今天给大家介绍一下.

加密按技术种类来分,有四种:

1. 根本不考虑解密问题;

2. 私用密钥加密技术:对称式加密(Symmetric Key Encryption):对称式加密方式对加密和解密使用相同的密钥。通常,这种加密方式在应用中难以实施,因为用同一种安全方式共享密钥很难。如:RC4、RC2、DES 和 AES 系列加密算法。

3. 公开密钥加密技术:非对称密钥加密(Asymmetric Key Encryption):非对称密钥加密使用一组公共/私人密钥系统,加密时使用一种密钥,解密时使用另一种密钥。公共密钥可以广泛的共享和透露。当需要用加密方式向服务器外部传送数据时,这种加密方式更方便。如: RSA

4. 数字证书。(Certificate):数字证书是一种非对称密钥加密,但是,一个组织可以使用证书并通过数字签名将一组公钥和私钥与其拥有者相关联。

 

接下来我将介绍七种加密算法或者技术,有可能晦涩难懂,大家需要认真听一下前五种,并且选一种着重记忆,其他的四种中选一个学会使用.剩下的两种大家听一下就可以了.还有,当我说到”原理”,”特点”,”本质”和”使用场景和步骤”等字眼的时候,请大家提起精神集中注意力.

 

第一种,也是最简单的,异或加密,那么什么是异或加密?我们知道java中的异或算法,其实这种加密算法就是基于异或算法的, 简单点说,异或运算中,如果某个字符(或数值)x 与 一个数值m 进行异或运算得到y,则再用y 与 m 进行异或运算就可以还原为 x ,因此应用这个原理可以实现数据的加密解密功能。

那么它的使用场景都有哪些呢?

1)两个变量之间的交换

2)数据的简单加密(注意是简单的加密和解密)

3)它的加密和解密的密钥都是一样的,所以加密解密的过程都是一样的,只是方法在调用的时候传入的参数不一样.

第二种,也是我们在项目中用的比较多的,就是MD5码加密算法.他常用于存储密码,校验文件的一致性(也就是文件是否被修改过).我们在手机安全卫士阶段用过.MD5英文全称“Message-Digest Algorithm 5”,翻译过来是“消息摘要算法5”,由MD2、MD3、MD4演变过来的,是一种单向加密算法,是不可逆的一种的加密方式。

MD5加密的特点:

1)压缩性:任意长度的数据,算出的MD5值长度都是固定的。

2)容易计算:从原数据计算出MD5值很容易。   3)抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

4)强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

 

应用场景:

一致性验证:我们在网上下载windows系统镜像会提供一个md5码用于校验文件是否被修改

数字签名:

安全访问认证:

 

安全性讨论:

虽然说MD5加密本身是不可逆的,但并不是不可破译的,网上有关MD5解密的网站数不胜数,破解机制采用穷举法,就是我们平时说的跑字典。所以如何才能加大MD5破解的难度呢?

1.)对字符串多次MD5加密

2.)MD5加盐:加盐算法和原算法没有本质区别,只是加密的时候进行了拼接字符串的操作.

加盐的方式也是多种多样

string+key(盐值key)然后进行MD5加密

用string明文的hashcode作为盐,然后进行MD5加密

随机生成一串字符串作为盐,然后进行MD5加密

 

第三种是,SHA1(安全散列算法)加密解密,同系列的还有SHA-224,SHA-256算法,据说sha1已经被破解了,现在推荐使用SHA256:SHA即安全哈希算法,主要适用于数字签名标准里面定义的数字签名算法.原理是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。类似MD5加密.

特点是:

不可以从消息摘要中复原信息

两个不同的消息,不会产生同样的消息摘要

 

第四种是,RSA加密算法(名字源于麻省理工学院三位发明者的姓氏首字母):RSA算法是最流行的公钥密码算法,使用长度可以变化的密钥。RSA是第一个既能用于数据加密也能用于数字签名的算法,也是一种非对称的加密算法。

原理:

(只需要知道它们是基于大数分解的就可以了)

1.随机选择两个大质数p和q,p不等于q,计算N=pq;

2.选择一个大于1小于N的自然数e,e必须与(p-1)(q-1)互素。

3.用公式计算出d:d×e = 1 (mod (p-1)(q-1)) 。

4.销毁p和q。

最终得到的N和e就是“公钥”,d就是“私钥”,发送方使用N去加密数据,接收方只有使用d才能解开数据内容。

RSA的安全性依赖于大数分解,小于1024位的N已经被证明是不安全的,而且由于RSA算法进行的都是大数计算,使得RSA最快的情况也比DES慢上倍,这是RSA最大的缺陷,因此通常只能用于加密少量数据或者加密密钥,但RSA仍然不失为一种高强度的算法。

RSA加密的过程大致是:

            * 使用步骤:

            * 1.生成RSA密钥对

            * 2.公钥加密

            * 3.私钥加密

            * 4.公钥解密

            * 5.私钥解密

            

第五种是BASE64,Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64并不是安全领域的加密算法,其实Base64只能算是一个编码算法,对数据内容进行编码来适合传输。标准Base64编码解码无需额外信息即完全可逆,即使你自己自定义字符集设计一种类Base64的编码方式用于数据加密,在多数场景下也较容易破解。Base64编码本质上是一种将二进制数据转成文本数据的方案。对于非二进制数据,是先将其转换成二进制形式,然后每连续6比特(2的6次方=64)计算其十进制值,根据该值在A--Z,a--z,0--9,+,/ 这64个字符中找到对应的字符,最终得到一个文本字符串。

所以,综合以上所述,严格的讲Base64不能算是一种加密,只能说是编码转换。

 

还有两种是DES和AES加密

DES: DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,

24小时内即可被破解。

 

AES:这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。单纯从名字上看AES(Advanced Encryption Standard)高级加密标准,安全性要高于DES,其实AES的出现本身就是为了取代DES的,AES具有比DES更好的安全性、效率、灵活性,所以对称加密优先采用AES。