Android 文件加密及解密手册,方便查询记忆

原创 2015年08月13日 15:58:03
文件加密及解密


1. 保护隐私数据不被未授权访问;
什么是加密
 1. 保护隐私数据不被未授权访问;
 2. 用于隐藏真实数据,进行安全的数据传递;
 3. 避免数据被第三方截获;
2. 用于隐藏真实数据,进行安全的数据传递;
3. 避免数据被第三方截获;
古代加密方式:置换(反序,替换)
加密算法的历史
 古代加密方式:置换(反序,替换)
 现代加密算法:带密码的加密、两套密码的加密、动态密码加密。
 现代加密:对称加密、非对称加密
现代加密算法:带密码的加密、两套密码的加密、动态密码加密。
现代加密:对称加密、非对称加密
1. 能否通过一个密码进行加密和解密的操作,如果能就是对称加密。
对称加密
 1. 能否通过一个密码进行加密和解密的操作,如果能就是对称加密。
 2. 对称加密都有密码。
 3. 常用的加密方式DES, AES
2. 对称加密都有密码。
3. 常用的加密方式DES, AES
DES 加密算法
 说明
  DES 通过密码,对数据进行大量循环方式的异或
操作,从而生成加密后的数据。
DES对数据依次进行加密,一次加密是8个字节一起
因此,DES密码,必须是64bit,也就是8个字节
 DES加密实现
  1. DES加密之后的数据,不能够直接生成字符串的;
  2. 加密:  M 明文, K 12345678, D 加密后数据
             D = DES(M, K) 用K密码对M进行加密生成D
  3. 解密:M = DES(D, K)
  4. 这种可以通过相同的密码进行加密和解密的叫做对称加密。
 DES API
  1. Cipher 加密/解密引擎,用于实际的处理
  2. cipher.init(int mode, Key key) 设置加密还是解密
  3. Key 对于DES需要使用 SecretKeyFactory 进行密码创建
  创建密码对象用的是 DESKeySpec
  4. Cipher update(byte[]) 每次调用都会返回一部分处理的数据,DES API doFinal 就只能返回最后一次的数据,不是完整的,
  5. DES 加密推荐使用 doFinal 来完成。
 DESede 加密方式
  对于DES 或者 DESede 而言,如果实现DESede的话,那么:Cipher 算法调整为 DESede,SecretKeyFactory制定的算法,同样调整为 DESede, 其中需要使用 DESedeKeySpec 生成密码,而且密码的长度 24个字节。
AES 加密算法
 特点
  1. 速度快
  2. 强度高
  3. Java中默认支持 AES 128bit 加密
   AES 256bit 美国军方的标准;
   AES 256bit 需要美国出口许可证才可以用。
 DES, AES 特性 - 分块加密
  Padding: 加密的时候,分块是数据按照固定长度一块一块处理,可以通过 Cipher 参数进行分块的控制
  NoPadding:如果数据不是块长度的倍数,那么不会填充
  一般情况下,填充会自动向数据后面添加 字节0 补齐
 AES 常用的Cipher算法
  1. AES 默认可以使用,有时也会出现BadPaddingException,不建议使用
  2. AES/ECB/PKCS5Padding  另外一种AES 加密形式,建议使用
  3. AES/CBC/PKCS5Padding 内部的算法模式不同。
  4.算法及密码长度限制
   算法/模式/填充                16字节加密后数据长度        不满16字节加密后长度  
   AES/CBC/NoPadding             16                          不支持  
   AES/CBC/PKCS5Padding          32                          16  
   AES/CBC/ISO10126Padding       32                          16  
   AES/CFB/NoPadding             16                          原始数据长度  
   AES/CFB/PKCS5Padding          32                          16  
   AES/CFB/ISO10126Padding       32                          16  
   AES/ECB/NoPadding             16                          不支持  
   AES/ECB/PKCS5Padding          32                          16  
   AES/ECB/ISO10126Padding       32                          16  
   AES/OFB/NoPadding             16                          原始数据长度  
   AES/OFB/PKCS5Padding          32                          16  
   AES/OFB/ISO10126Padding       32                          16  
   AES/PCBC/NoPadding            16                          不支持  
   AES/PCBC/PKCS5Padding         32                          16  
   AES/PCBC/ISO10126Padding      32                          16  
 AES API
  1. Cipher 加密/解密引擎
  2. 创建密码生成器 KeyGenerator,设置密码生成的密码长度 128 bit和设备安全随机数 ,
 如keyGenerator.init(128, new SecureRandom(password.getBytes()));
  3.生成 SecretKey keyGenerator.generateKey()
  4. 初始化 引擎 cipher.init(Cipher.ENCRYPT_MODE, secretKey)
  5. 加密处理 cipher.doFinal(byte[] origData)
非对称加密算法
 加密实现
  1. M 明文 D 公钥 E 密钥 C 密文 n 公共模数 0x10001
  2. C = M ^ E mod n
  3. M = C ^ D mod n
  4. 通常 E + n 作为 私钥隐秘保存
  5. 通常 D + n 作为公钥,可以给任何人。
  6. 通过 C ^ D mon => M
  7. E 通过计算两个 1024bit 以上的整数(并且是素数),
   公钥  D = (素数1 - 1) * (素数2 - 1) E 包含两个素数
  D 安全性足够高
 非对称加密的API
  1. Cipher 可以进行加密,用的是 “RSA”, “DSA”
  2. KeyPairGenerator 生成 公钥和私钥
  3. cipher init 加密用 私钥, init 解密 用的是公钥初始化。
加密实现
 1. M 明文 D 公钥 E 密钥 C 密文 n 公共模数 0x10001
 2. C = M ^ E mod n
 3. M = C ^ D mod n
 4. 通常 E + n 作为 私钥隐秘保存
 5. 通常 D + n 作为公钥,可以给任何人。
 6. 通过 C ^ D mon => M
 7. E 通过计算两个 1024bit 以上的整数(并且是素数),
  公钥  D = (素数1 - 1) * (素数2 - 1) E 包含两个素数
 D 安全性足够高
非对称加密的API
 1. Cipher 可以进行加密,用的是 “RSA”, “DSA”
 2. KeyPairGenerator 生成 公钥和私钥
 3. cipher init 加密用 私钥, init 解密 用的是公钥初始化。
Base64、MD5编码
 android.util.Base64类
  encode(byte[],flag)
  encodeToString(byte[],flag) 编码并转换成字符串
  decode(byte[],flag) 解码
  flags标识
   Base64.DEFAULT 默认,如果字符串过长(超过76)时自动在中间加一个换行符,字符串最后也会加一个换行符。可能会导致和其他模块对接时结果不一致,建议使用Base64.NO_WRAP
   Base64.NO_WRAP 不换行处理
   Base64.NO_PADDING 结束位置省略“==”
 it.sauronsoftware.base64.Base64类
  第三方Base64编码、解码工具类
  Base64.decode(byte[]);
  Base64.encode(byte[])
 MD5
  java.security.MessageDigest
  MD5加密:
版权声明:本文为博主原创文章,未经博主允许不得转载。

OpenJudge - 1002:方便记忆的电话号码

1002:方便记忆的电话号码
  • Fingertipx
  • Fingertipx
  • 2014年11月27日 16:28
  • 1115

poj 1002 方便记忆的电话号码 字符串处理+排序

刚开始 做的时候  只是
  • u010840444
  • u010840444
  • 2014年04月13日 16:34
  • 1129

POJ 1002 电话号码字符串处理

这题比较简单,就是对电话号码的字符串处理并排序输出,但是实现时有几个注意的地方 1、用map存储比较方便,可以自动根据string的排序规则排序,而且题目数据恰好是的K-V存储特点。 2、...
  • yangliuy
  • yangliuy
  • 2011年12月21日 00:31
  • 2305

Android AES 文件加密解密

几番折磨终有结果,现将Demo整理
  • zjclugger
  • zjclugger
  • 2014年06月26日 14:03
  • 14947

poj1002

#include #include using namespace std; string zero("0"); int number[10000000]; void integerToSt...
  • swwlqw
  • swwlqw
  • 2013年09月16日 18:31
  • 332

Makefile 手册,方便查询

英文的手册:http://www.gnu.org/software/make/manual/make.html#Introduction下边转一篇makefile文章,很好,方便查阅。        ...
  • Dark_gezi
  • Dark_gezi
  • 2017年03月01日 09:43
  • 168

3:方便记忆的电话号码

总时间限制: 2000ms 内存限制: 65536kB 描述 英文字母(除Q和Z外)和电话号码存在着对应关系,如下所示: A,B,C -> 2 D,E,F -> 3 ...
  • u013487630
  • u013487630
  • 2014年02月10日 16:09
  • 1323

一种php文件加密方法的破解

文件加密方式,变量混淆+字符串加密文件原始内容 :$OOO0O0O00=__FILE__;$OOO000000=urldecode(%74%68%36%73%62%65%68%71%6c%61%34%...
  • lhjs12
  • lhjs12
  • 2011年06月12日 17:56
  • 1401

Android应用安全隐患现状,资源文件加密/安全防护进化史

前言     有安全数据显示,2014全年,Android用户感染恶意程序3.19亿人次,平均每天恶意程序感染量达到了87.5万人次。同时,Android应用被破解和盗版等事件也层出不穷。很明显,An...
  • a125138
  • a125138
  • 2015年06月04日 20:42
  • 3439

1002:方便记忆的电话号码 ACM/百炼

1002:方便记忆的电话号码  总时间限制: 2000ms 内存限制: 65536kB 描述 英文字母(除Q和Z外)和电话号码存在着对应关系,如下所示: A,B,C -...
  • qq_34125999
  • qq_34125999
  • 2016年05月09日 10:05
  • 1260
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 文件加密及解密手册,方便查询记忆
举报原因:
原因补充:

(最多只允许输入30个字)