文件加密

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 这篇文章主要讲述在Mobile BI(移动商务智能)开发过程中,在网络通信、数据存储、登录验证这几个方面涉及的加密...
    雨_树阅读 2,316评论 0 6
  • 概述 之前一直对加密相关的算法知之甚少,只知道类似DES、RSA等加密算法能对数据传输进行加密,且各种加密算法各有...
    Henryzhu阅读 2,989评论 0 14
  • 本文主要介绍移动端的加解密算法的分类、其优缺点特性及应用,帮助读者由浅入深地了解和选择加解密算法。文中会包含算法的...
    苹果粉阅读 11,404评论 5 29
  • 《白鹿原》开篇就介绍了白嘉轩一生娶了7个女人,很多人都觉得这个开头是这部长篇小说中的最大的败笔,对全篇小说没有什么...
    虎叔2018阅读 620评论 8 7
  • 小时候听《那一夜》,《光棍好苦》。周杰伦的歌听不来,大一点喜欢许嵩的《断桥残雪》,《清明雨上》,现在听着杰伦的每一...
    释浪阅读 188评论 0 0