Java 加密算法
1. 凯撒密码
一种古老的加密技术,它的基本思想是:通过把字母移动一定的位数来实现加密和解密。
例如:ABC 右移3位 DEF。
2. 对称加密
2.1 概述
对称加密的意思就是:加密和解密都是用的同一个key。
主要有:DES、3DES(DESede)、 AES、Blowflsh
2.2 对称加密常用的数学运算
对称密码中有几种常用的数学运算。
移位和循环移位
移位就是将一段数码按照规定的位数整体性的左移和右移。
例如:对十进制数 12345678 循环右移1位:81234567,循环左移1位:23456781。
置换
就是将数码中的某一位的值根据置换表的规定,用另一位代替。
扩展
就是将一段数码扩展成比原来位数更长的数码。
压缩
就是将一段数码压缩成比原来位数更短的数码。
异域
简单的记为:无进位相加。
总结:这些运算主要是对比特位进行操作,共同目的就是尽可能的把明文数码打乱,从而加大破译的难度。
单位换算
加密算法分类
2.3 base64 编码
- base64 不是加密算法 是可读性算法
- base64 目的不是保护我们的数据,目的是可读性
- base64 是由64个字符组成 大写A-Z,小写a-z,数字0-9,两个字符+和/
- base58 一般用于比特币里面的一种编码方式
- base58里面没有数字0,没有字母o,没有大写字母I和小写字母i,没有+和/ 一共58个字符
base64原理:
三个字节为一组,一个字节是8位,一共24位,base64将三个字节转换为4组,每组6位。
一个字节是8位,缺少2位,在高位进行补0。
这样做的好处,base64取后面6位。前面的2位,会把它去掉,可以把base64控制到0-63之间。
在base64里面3个字节为一组,如果不够三个字节,需要用 = 补齐。
public class TestBase64 {
public static void main(String[] args) {
System.out.println(new String(Base64.getEncoder().encode("1".getBytes())));
System.out.println(new String(Base64.getEncoder().encode("12".getBytes())));
System.out.println(new String(Base64.getEncoder().encode("123".getBytes())));
}
}
2.4 DES算法
DES 是 Data Encryption Standard(数据加密标准)的缩写。由 IBM 公司研制的一种对称密码算法。DES 是一个分组加密算法,典型的DES以64位分组秘钥对数据进行加密,加密和解密用的是同一个算法。它的秘钥总长度是64位,其中前56位参与运算,8位作为校验码,不参与加密运算。秘钥可以是任意的56位的数。其保密性依赖于秘钥。
- 需要一个秘钥
- 秘钥长度64bit,8字节
- 数据分组,每组数据8字节
乱码原因:
2.5 3DES算法
3DES又称Triple DES,是DES加密算法的一种模式,它使用3条56位的密钥对3DES数据进行三次加密。
处理流程:加密 -> 解密 -> 加密。
-
需要3个秘钥
- 每个秘钥8字节,一共24字节
- 数据分组,每组是8个字节
-
加密情况分析
- 三个秘钥不同
- 数据被加密三次
- 秘钥1,2相同,和3不同
- 被秘钥3加密一次
- 秘钥1,3相同,和2不同
- 使用两个秘钥加密三次
- 秘钥2,3相同,和1不同
- 使用秘钥1加密一次
- 秘钥1,2,3相同
- 数据被加密一次,和DES效果一样
- 三个秘钥不同
2.6 AES算法
AES(Advanced Encryption Standard)
AES分组长度为128比特。有128,192,256比特三种。
2.7 加密模式
ECB
-
ECB : Electronic Codebook 电子密码本,把需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密。
-
Java中默认的加密模式
优点:可以并行处理数据
缺点:同样的原文生成同样的密文,不能很好的保护数据
CBC
- CBC:Cipher-block chaining,密码块连接,每个明文块先与前一个密文块进行异或后,再进行加密。在这种模式中,每个密文块都依赖于它前面的所有明文块。
- CBC模式下,需要创建初始化向量iv。
优点:同样的原文生成的密文不一样
缺点:串行处理数据
2.8 填充模式
NoPadding
- 不填充。
- 在DES下,原文长度必须是8byte的整数倍。
- 在AES下,原文长度必须是16byte的整数倍。
PKCS5Padding
-
Java 中默认的填充模式。
-
数据块的大小为8位,不够就补足。
3. 非对称加密
3.1 简介
-
非对称加密算法,必须要有两个秘钥,一个公钥,一个私钥。
-
如果是公钥加密,必须要私钥解密。
-
如果是私钥加密,必须要公钥解密。
3.2 数字签名
数字签名:公钥数字签名,只有信息的发送者,才能产生别人无法伪造的一段数字串,类似于写在纸上面的普通物理签名。
数字证书
CA (Certificate)认证中心,采用PKI
(Public Key Infrastructure)公开密钥基础架构技术,专门提供网络认证服务。CA 机构必须是可信任的单位团体。
数字证书如何生成?
服务器把公钥A发送给认证机构加密。认证机构再把数字签名A、公钥A打包成证书返回给服务器。
https
网页加密
首先客户端向服务端发送请求。
服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。
客户端的“证书管理器”,有“受信任的根证书颁发机构”列表。客户端会根据这张列表。查看解开数字证书的公钥是否在列表之内。
如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器就会发出警告。
如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。
受信任的根证书颁发机构
计算机系统安装的时候预装了知名CA机构的根证书,这里包含了CA机构的公钥,浏览器就会对服务器的证书进行验证。
证书使用
- 所有的网站都使用
https
https
=http
+ssl
ssl
= Secure Socket Layer,是一个通讯协议,通讯的过程中使用了数字证书
https
通信过程
- 所有的通信不再传输公钥,而是传输数字证书。
- 证书里面包含了公钥,可以由CA机构认证。
1. 网站提供者会自己生成公钥私钥。
- 也可以不自己生成,全部由CA帮助生成
2. 服务器提供者将公钥发送给选择的CA机构。
3. CA机构也有自己的私钥公钥。CA使用自己的私钥对服务器的公钥进行签名。
- 还有一些其他辅助信息(发行机构,主题,指纹)
- 公钥
- 签名
CA向服务器颁发一个数字证书
4. 当用户访问服务器的时候,服务器会将CA证书发送给客户。
5. 在客户的浏览器中,已经随着操作系统预装了知名CA机构的根证书,这里面包含了CA机构的公钥,浏览器就会对服务器的证书进行验证。
6. 如果验证成功,说明服务器可靠,可以正常通信(小锁头)。
7. 如果验证失败,显示(Not Secure),提示Warning。
8. 证书有效时,浏览器会将自己支持的对称加密算法(`DES`, `3DES`, `AES`)发送给服务器,生成随机秘钥(对称),使用服务器的公钥,对上述信息加密。发送给服务器。
9. 服务器选择一个加密算法,使用对称秘钥加密消息,发送给客户端。
10. 双方达成一致,接下来通信转换为对称加密。
windows下查看证书
打开CMD
输入:certmgr.msc