加密与解密

408 阅读4分钟

API

API文档,搜Cipher类

ASCII编码(American Standard Code for Information Interchange)

美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。

Byte和Bit

Byte:字节,数据存储单位。

bit:比特,又名位。一个位要么0,要么1,数据传输的单位。

1Byte=8bit

对称加密算法

Base64解决乱码问题

凯撒算法

凯撒算法是一种根据字母与字母之间的替换来破解凯撒密码的算法。

底层机制

把字母移动一定的位数来实现加密和解密

DES(Data Encryption Standard)数据加密标准

特点

可以自己指定密钥,可逆,有密钥即可破解

底层机制

操作二进制

用法三部曲

1.创建cipher对象

2.初始化cipher

3.加密/解密

密钥长度

算法/工作模式/填充模式(位) DES/CBC/NoPadding (56)

8个字节,8*8=64位,DES前7个字节参与加密计算,最后1个字节作为校验码

AES(Advanced Encryption Standard)高级加密标准

特点

可以自己指定密钥,可逆,有密钥即可破解

底层机制

操作二进制

用法三部曲

1.创建cipher对象

2.初始化cipher

3.加密/解密

密钥长度

算法/工作模式/填充模式(位) AES/CBC/NoPadding (128)

16个字节,16*8=128位

算法/工作模式/填充模式

工作模式

名称 英文 全名 方法 优点 缺点
ECB ElectronicCodeBook 电子密码本 每块独立加密 1.分块处理并行处理 同样的原文得到相同的密文,容易被攻击
CBC CipherBlockChaining 密码分组链接 每块加密依赖于前一块的秘闻 1.同样的原文得到不同的密文2.原文为小改动影响后面全部密文 1.加密需要串行处理2.误差传递

PS:CBC模式需要额外参数

填充模式(Padding)

是对需要按块处理的数据,当数据长度不符合块处理需求时,按照一定方法填充满块长的一种规则。

对称加密应用实战

  • 可逆的,就可以使用堆成加密

  • DES和AES 优先选择AES,因为更加高级

  • 从网络得到的数据缓存到本地

非对称加密

  • 常用算法:RSA
  • 密钥对:公钥和私钥,必须由系统生成
  • 公钥加密,私钥解密;私钥加密,公钥解密;
  • 公钥互换:两个组织或者人相互交换公钥(支付宝)
  • 加密速度慢

RSA

用法三部曲

1.创建cipher对象

2.初始化cipher

3.加密/解密

分段加密

每次最大加密117字节

分段解密

每次最大解密128字节

保存密钥对

通过密钥工厂将字符串转成密钥对象,需要用到Base64合法format编码

消息摘要(MessageDigest)

  • 常用算法:md5、sha1、sha256
  • 特点:不可逆(加密后无法破解)

应用场景:

1.对密码进行md5加密后保存到数据库里

2.软件下载站使用消息摘要计算文件指纹,防止被篡改

3.数字签名

md5

  • 加密后16个字节
  • 加密后转成16进制后变成32个字节
  • 消息摘要后的结果是固定长度,无论你的数据由多大,即使一个G的文件,摘要结果都是固定长度

sha1

  • 加密后20个字节
  • 加密后转成16进制后变成40个字节

sha256

  • 加密后32个字节
  • 加密后转成16进制后变成64个字节

应用实战

md5:登录中用户的密码

增加破解难度

  • 1.多次加密
  • 2.“加盐”:拼接字符串
  • 3.结合数字签名

数字签名

非对称加密+消息摘要

应用场景

  • 1.校验用户身份(使用私钥签名,公钥校验,只要用公钥能校验通过,则该信息一定是私钥持有者发布的)
  • 2.校验数据的完整性(用解密后的消息摘要跟原文的消息摘要进行对比)

数字签名流程图