Android数据加密介绍
信息安全
- 机密性:为了防止信息被窃听
- 完整性:为了防止信息被篡改
- 认证:为了防止攻击者伪装成真正的发送者
- 不可否认性:为了防止发送者事后否认自己没有做过
加密方式
java中使用了多种加密方式。常见的加密方式有两种:
-
对称加密:
加密和解密使用同一个密钥:所有的数据,变成byte数组之后,每个数 + 1
算法:DES、DES3、AES、RC5、Blowfish等
分组密码,即以分组为单位进行处理的密码算法
初始化向量IV:与分组长度一致,加解密一致
存在密钥配送问题
-
非对称加密
加密用公钥,解密用私钥
主要基于数学上困难的问题来保证机密性
算法:RSA、DSA、ElGamal、Rabin等
公钥密码处理速度远远低于对称密码
-
混合密码
对称密码和公钥密码相结合
用对称密码来加密消息
用公钥密码来加密对称密码的密钥
对称密码的密钥是临时生成的会话密钥
-
单向散列函数
MD4、MD5、SHA-1、SHA-256、SHA-384、SHA-512、SHA-3等等
-
消息认证码
GUID :UUID,不允许重复的场景,使用UUID
消息认证码(message authentication code)是一种确认完整性并进行认证的技术,简称为 MAC
输入包括消息和共享密钥,输出固定长度的数据,称为MAC值
比单向散列函数多了一个共享密钥
普遍的实现算法:HMAC
- 证书一般包含:主体公钥值、主体标识符信息、证书有效期、颁发者标识符信息、颁发者的数字签名.证书标准:X.509
通过私钥去权威机构认证,产生一个证书和公钥。私钥产生证书,公钥验证证书。
但是如果是用私钥对消息进行签名,效率很低,所以一般,私钥是对消息的散列值进行签名。
java加密API规范和参考架构
http://docs.oracle.com/javase//docs/guide/security/CryptoSpec.html#AppA
Appendix A:附录A