- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android应用安全开发之浅谈加密算法的坑选编
Android应用安全开发之浅谈加密算法的坑作者:阿里移动安全@伊樵,@舟海阿里聚安全,一站式解决应用开发安全问题Android开发中,难免会遇到需要加解密一些数据内容存到本地文件、或者通过网络传输到其他服务器和设备的问题,但并不是使用了加密就绝对安全了,如果加密函数使用不正确,加密数据很容易受到逆向破解攻击。还有很多开发者没有意识到的加密算法的问题。1、需要了解的基本概念密码学的三大作用:加密( Encryption)、认证(Authentication),鉴定(Identification)?加密:防止坏人获取你的数据。?认证:防止坏人修改了你的数据而你却并没有发现。?鉴权:防止坏人假冒你的身份。明文、密文、密钥、对称加密算法、非对称加密算法,这些基本概念和加密算法原理就不展开叙述了。2、Android SDK提供的API2.1 Android 加密相关API结构Android SDK使用的API和JAVA提供的基本相似,由 Java Cryptography Architecture (JCA,java加密体系结构) ,Java Cryptography Extension (JCE,Java加密扩展包) ,Java Secure Sockets Extension(JSSE,Java安全套接字扩展包),Java Authentication and Authentication Service(JAAS,Java 鉴别与安全服务)组成。JCA提供基本的加密框架,如证书、数字签名、消息摘要和密钥对产生器,对应的Android API中的以下几个包:JCE扩展了JCA,提供了各种加密算法、摘要算法、密钥管理等功能,对应的Android API中的以下几个包:JSSE提供了SSL(基于安全套接层)的加密功能,使用HTTPS加密传输使用,对应的Android API主要是.ssl包中。JAAS 提供了在Java平台上进行用户身份鉴别的功能。对应的Android API主要在以下几个包:它们其实只是一组接口,实际的算法是可由不同的Provider提供,Android API默认的Provider主要是是Bouncy Castle和OpenSSL。?此外Android API还提供了android.security和android.security.keystore(API 23新增)来管理keychain和keystore。2.2 Base64编码算法Base64编码算法是一种用64个字符(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/)来表示任意二进制数据的方法。在计算机网络发展的早期,由于“历史原因”,电子邮件不支持非ASCII码字符,如果要传送的电子邮件带有非ASCII码字符(诸如中文)或者图片,用户收到的电子邮件将会是一堆乱码,因此发明了Base64编码算法。至于为何会乱码?请大家自行Google。在加解密算法中,原始的数据和加密后的数据一般也是二进制数据,为了不传输出错,方便保存或者调试代码,一般需要对加密后的数据进行base64编码。?Android提供了Base64编码的工具类android.util.Base64,可以直接使用,不用自己去实现base64编码的算法了。?如:开发者建议:?base64只是一种编码方式,并不是一种加密算法,不要使用base64来加密数据。2.3 随机数生成器在Android加密算法中需要随机数时要使用SecureRandom来获取随机数。?如:注意不要给SecureRandom设置种子。调用seeded constructor或者setSeed(byte[])是不安全的。SecureRandom()默认使用的是dev/urandom作为种子产生器,这个种子是不可预测的。?开发者建议:?1、不要使用Random类来获取随机数。?2、在使用SecureRandom时候,不要设置种子。使用以下函数设置种子都是有风险的:2.4 Hash算法Hash算法是指任意长度的字符串输入,此算法能给出固定n比特的字符串输出,输出的字符串一般称为Hash值。?具有以下两个特点:抗碰撞性:寻找两个不同输入得到相同的输出值在计算上是不可行的,需要大约??的时间去寻找到具有相同输出的两个输入字符串。不可逆:不可从结果推导出它的初始状态。抗碰撞性使Hash算法对原始输入的任意一点更改,都会导致产生不同的Hash值,因此Hash算法可以用来检验数据的完整性。我们经常见到在一些网站下载某个文件时,网站还提供了此文件的hash值,以供我们下载文件后检验文件是否被篡改。?不可逆的特性使Hash算法成为一种单向密码体制,只能加密不能解密,可以
文档评论(0)