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加密:

Android 文件加密及解密相关推荐

  1. tkinter实现文件加密和解密

    源代码:https://gitee.com/mydreamambitious/file-encryption-and-decryption 注:这个代码和界面是做好的,但是还在进行优化和美化中.但是在 ...

  2. Java基础篇之利用IO流给文件加密、解密

    目标:给文件加密.解密(最基础版) 注意: a.加密过程:先读取整个目标文件,然后将目标文件写入一个新的文件中,在写入的过程中,每隔几个字符插入一个加密符号(随意定),此时这个新的文件就是加密文件 b ...

  3. (C语言)简单的文件加密和解密程序

    一个简单的文件加密和解密程序 main.c #include <stdio.h> #include <stdlib.h> #include "fun.h"i ...

  4. 文件加密和解密 - 密钥存储

    当我们想要做一次加密系统,或者只是有一个关于这个问题,它是如何保存的加密和解密密钥. 一般认为想要的文件加密和解密,对称算法用于.一般是AES要么DES. 这就存在密钥管理的问题,它是如何? 基本上两 ...

  5. Linux下使用Vim/Vi给文件加密和解密

    本文介绍在Linux下使用Vim/Vi给文件加密和解密的简单方法,Vim的文件加密功能不是很强,但比较实用,因为不必要借助其他软件即可实现. 一. 用 Vim/Vi 加密文件: 用 Vim/Vi 加密 ...

  6. 文件加密和解密软件:AutoCrypt for mac

    为大家推荐一款好用的文件加密和解密软件,AutoCrypt for mac具备强大的AES-256算法,只需点击一下,即可加密并保存在自定义位置,能够轻松帮助用户加密或解密文件,而且autocrypt ...

  7. Android 文件加密 资料

    Android 文件加密 资料 https://source.android.google.cn/security/features?hl=zh-cn

  8. android中文件加密和解密的实现

    最近项目中需要用到加解密功能,言外之意就是不想让人家在反编译后通过不走心就能获取文件里一些看似有用的信息,但考虑到加解密的简单实现,这里并不使用AES或DES加解密 为了对android中assets ...

  9. android 文件加密解决方法,一种Android平台的文件快速加密以及解密方法与流程

    本发明属于数据安全领域,具体涉及一种Android平台的文件快速加密以及解密方法. 背景技术: 目前移动办公系统极大地提升了企.事业单位的工作效率,而带装有办公应用的智能设备中会存储一些较高机密性的文 ...

最新文章

  1. 22.调用delay()方法延时执行动画效果
  2. 搜索(DFS)---好友关系的连通分量数目
  3. 走进单元测试:测试需要从哪些方面着手
  4. Word Embedding News | 词嵌入新鲜事:COVID-19特刊
  5. Hadoop MapReduce V2——找出每个月气温最高的2天
  6. 深度-图像风格变换【二】
  7. Community Server Resources
  8. Python的并发并行[3] - 进程[1] - 多进程的基本使用
  9. Wpf初学 ---03设计一个优美的注册登录界面(连接数据库)
  10. 超声延时聚焦原理及算法仿真
  11. Linux——系统磁盘管理与文件系统
  12. 雪花算法中机器id保证全局唯一
  13. #51CTO学院四周年# 感谢51CTO学院让我走出迷茫
  14. Java imageio底层_java - Java中的ImageIO问题 - 堆栈内存溢出
  15. 制作人 Joe Carrell 教你充分释放TB12音色野兽
  16. The operation couldn't be completed.(LaunchServicesError error 0.)问题描述和解决方法
  17. 帝国源码php安装文件是哪个,帝国CMS数据库配置文件是哪个
  18. 计算机毕业是先就业还是考研,先工作还是先考研?这些专业更适合先就业
  19. WPS计算机一级考试知识点,计算机一级考试WPS练习题及答案
  20. zip、rar压缩文件密码破解——使用ARCHPR Professional Edition

热门文章

  1. 腾讯按奈不住 推出网页游戏《丝路英雄》
  2. Cycript(四):常用脚本
  3. 白天,你陪我黑龙潭戏水观瀑;夜晚,我陪你云蒙山数星看月
  4. nginx 访问静态图片
  5. Total Commander快捷键分类整理大全
  6. 基于linux-2.6.34内核编译详解,Linux 2.6、4.3内核编译过程的感受与总结
  7. ensp 防火墙示例_ensp实战之防火墙安全转发策略
  8. CoolShell-第0题
  9. ActiveMQ prefetch属性
  10. 压敏电阻与陶瓷气体放电管使用注意事项