Android 中常用加密算法

在Android开发中,难免会遇到需要加解密一些数据内容存到本地文件、或者通过网络传输到其他服务器和设备的问题,但并不是使用了加密就绝对安全了,如果加密函数使用不正确,加密数据很容易受到逆向破解攻击。还有很多开发者没有意识到的加密算法的问题。

1. 对称加密

对称加密:加密和解密都使用同一把秘钥,这种加密方法称为对称加密,也称为单密钥加密。 简单理解为:加密解密都是同一把钥匙。

常用算法 :AES、DES、3DES(3次des加密)
1.1 DES:全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来。

1.2 3DES:也叫Triple DES,是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

1.3 AES
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
算法简介:
AES加密过程涉及到4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。解密过程分别为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。加解密中每轮的密钥分别由初始密钥扩展得到。算法中16字节的明文、密文和轮密钥都以一个4x4的矩阵表示。
使用范畴:
可用于密码加密,账户信息加密以及重要文件加密保存。

数据存储是以“字节”(Byte)为单位,数据传输是大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0 或1(即二进制),每8 个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。

DES :加密核心是操作比特位;DES安全度在现代已经不够高,后来又出现的3DES算法强度提高了很多,但是其执行效率低下,AES具有比DES更好的安全性、效率、灵活性,所以对称加密优先采用AES

使用场景:

1.本地数据加密(例如加密android 里SharedPreferences 里面的某些敏感数据)
2.网络传输:登录接口post 请求参数加密{username=lisi,pwd=oJYa4i9VASRoxVLh75wPCg==}
3.加密用户登录结果信息并序列化到本地磁盘(将user 对象序列化到本地磁盘,下次登录时反序列化到内存里)
4.网页交互数据加密(Https)

2. 非对称加密:

RSA:通信双方各握有一对密钥(称为公钥和私钥)中的一把,己方密钥加密的数据,只有对方密钥能够解密。
支付宝支付使用了RSA

3.消息摘要算法

3.1MD5
Message Digest Algorithm MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)。MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的(16位或者32位,现在一般使用32位加密)。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。
使用范畴:
一般用于计算Sign(签名),也可用于密码加密,数据信息加密。值得注意的是MD5算法是不可逆的,在进行计算的时候要注意输入数据的大小写,大小写不同也会导致最后的加密结果不同
优化
目前md5可以通过一些解密网站进行穷举解析,可以通过MD5加盐的方式的进行加密,提高破解难度; 简单来说:由原来的H(p)变成了H(p+salt),相当于哈希函数H发生了变化,每次哈希计算使用的salt是随机的
简单来说:由原来的H(p)变成了H(p+salt),相当于哈希函数H发生了变化,每次哈希计算使用的salt是随机的
, H如果发生了改变,则已有的彩虹表数据就完全无法使用,必须针对特定的H重新生成,这样就提高了破解的难度。

4. base64

Base64并不是一种加密算法,而是一种转码算法。它把字节序列按照映射表转码为便于传输的64个可见字符,降低数据出错率。由于不同设备之间对于字符处理的方式不同,统一编码减少出错率;

使用范畴
用于对请求参数的加密,使得肉眼无法识别,不具有可读性,一般配合其他加密算法一起使用。

5. 数字签名

数字签名是非对称加密与数字摘要的组合应用
应用场景
校验用户身份(使用私钥签名,公钥校验,只要用公钥能校验通过,则该信息一定是私钥持有者发布的)
校验数据的完整性(用解密后的消息摘要跟原文的消息摘要进行对比)
签名过程
发送报文时,发送方用一个哈希函数从报文文本中生成报文摘要,然后用自己的私人密钥对这个摘要进行加密,这个加密后的摘要将作为报文的数字签名和报文一起发送给接收方,接收方首先用与发送方一样的哈希函数从接收到的原始报文中计算出报文摘要,接着再用发送方的公用密钥来对报文附加的数字签名进行解密,如果这两个摘要相同、那么接收方就能确认该数字签名是发送方的。
数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。二是数字签名能确定消息的完整性。因为数字签名的特点是它代表了文件的特征,文件如果发生改变,数字摘要的值也将发生变化。不同的文件将得到不同的数字摘要。 一次数字签名涉及到一个哈希函数、发送者的公钥、发送者的私钥。”

6.Hash算法

Hash算法是指任意长度的字符串输入,此算法能给出固定n比特的字符串输出,输出的字符串一般称为Hash值。
具有以下两个特点:
抗碰撞性:寻找两个不同输入得到相同的输出值在计算上是不可行的,需要大约 的时间去寻找到具有相同输出的两个输入字符串。
不可逆:不可从结果推导出它的初始状态。
MD5,SHA 都是Hash算法的一种;

总结

非对称加密算法的加密、解密的效率比较低。在算法设计上,非对称加密算法对待加密的数据长度有着苛刻的要求。例如RSA算法要求待加密的数据不得大于53个字节。由于非对称算法本身的复杂性,使得其对大数据加解密的适用性不强,所以非对称算法常与对称加密算法结合使用,即利用非对称算法对对称算法的密钥进行加密传输。

MD5在使用中可以和对称加密结合,增强安全性;

相关问题:
1.重放;万一黑客截获了app给服务器发送的请求数据,(哪怕是加密过的),然后冒充app向服务器发送重复的请求,服务器会不会被堵死?
解决方法:时间戳+token方案;每个请求带一个时间戳,这个时间戳和其他数据绑在一起并统一加密,所以黑客无法单独修改时间戳,如果服务器遇到来自同一个token的相同时间戳的请求,即可断定这是一次重放攻击,让token失效;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值