Android开发中,难免会遇到需要加解密一些数据内容存到本地文件、或者通过网络传输到其他服务器和设备的问题,所以我们要通过加密的方式安全的将数据进行存贮或者传送。加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。我们要知道并不是使用了加密就绝对安全了,如果加密函数使用不正确,加密数据很容易受到逆向破解攻击。很多情况下我们要让敏感的内容尽量在服务端,而不是放到客户端,密钥用动态的,不要自己给自己埋下祸根,尽量不要留下会被破解的可能性


加密的基础

一个密码系统的安全性只在于密钥的保密性,而不在算法的保密性。从理论上说,任何加密技术都可以破解,只是破解的难度不同而已。

密码学的三大作用:加密( Encryption)、认证(Authentication),鉴定(Identification)
加密:防止他人获取你的数据。
认证:防止他人修改了你的数据而你却并没有发现。
鉴权:防止他人假冒你的身份。


1. 消息和加密
消息被称为明文。用某种方法伪装消息以隐藏它的内容的过程称为加密,加了密的消息称为密文,而把密文转变为明文的过程称为解密


2. 完整性检验
消息的接收者应该能够验证在传送过程中消息没有被修改;入侵者不可能用假消息代替合法消息


3. 算法和密钥
加密过程是一种算法,是一个用于加密和解密的数学函数,通常情况下,有两个相关的函数,一个用作加密另一个用作解密


加密的分类

对称加密

对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法,在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起 经过加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,需要使用加密的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。
对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,而且对计算机功能要求也没有那么高。在对称加密算法中,使用的密钥只有一个,收发信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥,这也就存在了缺点,如果一旦密钥泄漏,那么加密的内容将都不可信了。
对称加密存在一些问题,比如一般不能提供信息完整性的鉴别,它无法验证发送者和接受者的身份。对称密钥的管理和分发工作是一件具有潜在危险的和烦琐的过程。对称加密是基于共同保守秘密来实现的,采用对称加密技术的各方,必须保证双方是相同的密钥,保证彼此密钥的交换是安全可靠的,同时还要设定防止密钥泄密和更改的程序。
在对称加密的算法中建议使用AES算法,因为DES默认的是56位的加密密钥,密钥长度不够,已经不安全,不建议使用。

常见的对称加密算法:AES、DES、3DES、Blowfish、IDEA、RC4、RC5、RC6


非对称加密

非对称加密就是“公开密钥系统”,与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(public key)和 私有密钥(private key)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
其实公钥和私钥并没有什么不同之处,公钥之所以成为公钥是因为它会被公开出来,产生任意份拷贝,供任何人获取,而只有服务主机持有唯一的一份私钥,从这种分发模式上看,这实际上是Web站点多客户端与单一服务器的网络拓扑所决定的,多客户端意味着密钥能被复制和公开获取,单一服务器意味着密钥被严格控制,只能由本服务器持有,这实际上也是后面要提到的之所以能通过数据证书确定信任主机的重要原因之一。
在非对称加密算法中主要使用的是RSA算法,非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要,但也存在一些问题比如加密和解密花费时间长、速度慢,它不适合用于对文件加密,只适于少量数据的加密。 在某些极端情况下,甚至能比非对称加密慢上百倍,非对称加密的典型应用就是数字签名。

常见的非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)


单项加密

单项加密其实是一种Hash算法,也称为 “数字摘要”,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息,因此是一种单项过程,常用在不可还原的密码存储、信息完整性校验等作用上。他具有以下两个特点
1. 抗碰撞性:在计算机上寻找两个不同输入得到相同的输出值的方式是不可行的。
2. 不可逆:不可从结果推导出它的初始状态。
抗碰撞性使Hash算法对原始输入的任意一点更改,都会导致产生不同的Hash值,因此Hash算法可以用来检验数据的完整性。我们经常见到在一些网站下载某个文件时,网站还提供了此文件的hash值,以供我们检验下载的文件是否被篡改。
不可逆的特性使Hash算法成为一种单向密码体制,只能加密不能解密,可以用来加密用户的登录密码等凭证。
我们要注意以下几点
1.MD2速度较慢已逐渐被淘汰;2.不要使用哈希函数做为对称加密算法的签名; 3.不建议使用MD2、MD4、MD5、SHA-1、RIPEMD算法来加密用户密码等敏感信息。这一类算法已经有很多破解办法,例如MD5算法,网上有很多查询的字典库,给出md5值,可以查到加密前的数据。

常见的单项加密算法:MD2、MD4、MD5、HAVAL、SHA


混合式加密


1. 数字签名

数字签名技术就是对“非对称密钥加解密”和“数字摘要“两项技术的应用,它将摘要信息(单向加密后的密文)用发送者的私钥加密,与原文(明文)一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用Hash算法对收到的原文产生一个摘要信息,与解密的摘要信息对比,如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。 (注意,数字签名只能验证数据的完整性,数据本身是否加密不属于数字签名的控制范围)

数字签名有两种功能

  1. 是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名
  2. 是数字签名能确定消息的完整性。


2. 数字证书

有了数字签名还是有漏洞存在,漏洞不在数字签名技术本身,而在它所依赖的密钥,只有密钥是真实可靠的前提下,使用数字签名才是安全有效的。冒充者完全可以替换掉原有的公钥,从而通过自己的私钥来获取传输信息,这时候,我们就需要有一个权威的第三方机构 (一般是由政府审核并授权的机构) 来统一对外发放公钥,只要请求方通过这种机构获取公钥,就避免了上述问题的发生。这种机构被称为证书权威机构(Certificate Authority, CA),它们所发放的包含主机机构名称、公钥在内的文件就是人们所说的“数字证书”。

数字证书的颁发过程: 用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息。用户就可以使用自己的数字证书进行相关的各种活动。


实际应用

在实际应用中,很多封装好的协议都是通过以上的基本协议实现的,比如SSL协议,和应用 SSL/TLS 的HTTPS,关于 SSL和HTTPS我们会单独整理,这里只是简单举例协议的应用实现

SSL

SSL协议在握手阶段使用的是非对称加密,在传输阶段使用的是对称加密,也就是说在SSL上传送的数据是使用对称密钥加密的,因为非对称加密的速度缓慢,耗费资源。其实当客户端和主机使用非对称加密方式建立连接后,客户端和主机已经决定好了在传输过程使用的对称加密算法和响应的密钥,由于这个过程的对称加密密钥是不可能被窃取盗用的,因此保证了在传输过程中对数据进行对称加密也是安全可靠的,在这种环境下除了客户端和主机之外,不可能有第三方能够窃取并解密出响应密钥

SSL协议主要确保了以下安全问题:   
1)加密数据,防止数据中途被窃取
2)认证用户和服务器,确保数据发送到正确的客户机和服务器
3)维护数据的完整性,确保在传输过程中不被更改。


HTTPS

HTTPS是由 SSL/TLS + HTTP 协议构建的可进行加密传输、身份认证的网络协议,通过下面这个图可以看出相关协议之间的关系。

有安全性就要做出一些妥协,https传输数据的效率和http相比有一定的差距。性能低的原因相信大家都应该知道,就是对数据进行加密解密的过程决定了它比http慢,另外一个重要原因的是https禁用了缓存。所以,只有那些对数据安全要求极高的情况下,才会选择使用https进行传输。

以上就是对Android加密机制的一个概述,后续我们将会总结具体的加密机制在android中的应用

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. Android(安卓)RecyclerView瀑布流布局添加Footer实现上拉加载
  4. Android视频编辑器(五)音频编解码、从视频中分离音频、音频混音、
  5. Android(安卓)开发神器系列(工具篇)之 Android(安卓)WiFi ADB
  6. Android分享笔记(3)Android(安卓)使用存放在存assets文件夹下的S
  7. Android(安卓)App Not Install. An existing package by the sam
  8. Android登录状态记录
  9. Android前后台传数据乱码,xml

随机推荐

  1. SQL Server 日期函数CAST 和 CONVERT 以
  2. SQLserver中用convert函数转换日期格式的
  3. MS SQL Server获取十二个月份的英文缩写
  4. Sql Server 分组统计并合计总数及WITH RO
  5. SQL Server误区30日谈 第30天 有关备份的
  6. SQL Server误区30日谈 第29天 有关堆碎片
  7. SQL Server误区30日谈 第28天 有关大容量
  8. SQL Server误区30日谈 第27天 使用BACKUP
  9. SQL Server误区30日谈 第25天 有关填充因
  10. SQL Server误区30日谈 第26天 SQL Server