这里写自定义目录标题
一、密码学基本概念
1、古典密码学
1)替换法
2)移位法
3)古典密码破解方式
2、近代密码学
3、现代密码学
1)散列函数
2)对称密码
3)非对称密码
对称密码的密钥安全极其重要,加密者和解密者需要提前协商密钥,并各自确保密钥的安全性,一但密钥泄露,即使算法是安全的也无法保障原文信息的私密性。
二、ASCII编码
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。
三、凯撒加密
四、频度分析法破解恺撒加密
五、Byte和bit
Byte : 字节. 数据存储的基本单位,比如移动硬盘1T , 单位是byte
bit : 比特, 又叫位. 一个位要么是0要么是1. 数据传输的单位 , 比如家里的宽带100MB,下载速度并没有达到100MB,一般都是12-13MB,那么是因为需要使用 100 / 8
关系: 1Byte = 8bit
5.1 获取字符串byte
package com.atguigu.bytebit;
/**
* ByteBit
*
* @Author: 尚硅谷
* @CreateTime: 2020-03-17
* @Description:
*/
public class ByteBit {
public static void main(String[] args) {
String a = "a";
byte[] bytes = a.getBytes();
for (byte b : bytes) {
int c=b;
// 打印发现byte实际上就是ascii码
System.out.println(c);
}
}
}
5.2 byte对应bit
package com.atguigu.bytebit;
/**
* ByteBit
*
* @Author: 尚硅谷
* @CreateTime: 2020-03-17
* @Description:
*/
public class ByteBit {
public static void main(String[] args) {
String a = "a";
byte[] bytes = a.getBytes();
for (byte b : bytes) {
int c=b;
// 打印发现byte实际上就是ascii码
System.out.println(c);
// 我们在来看看每个byte对应的bit,byte获取对应的bit
String s = Integer.toBinaryString(c);
System.out.println(s);
}
}
}
5.3 中文对应的字节
// 中文在GBK编码下, 占据2个字节
// 中文在UTF-8编码下, 占据3个字节
package com.atguigu;
/**
* ByteBitDemo
*
* @Author: 尚硅谷
* @CreateTime: 2020-03-16
* @Description:
*/
public class ByteBitDemo {
public static void main(String[] args) throws Exception{
String a = "尚";
byte[] bytes = a.getBytes();
for (byte b : bytes) {
System.out.print(b + " ");
String s = Integer.toBinaryString(b);
System.out.println(s);
}
}
}
5.4 英文对应的字节
六、常见的加密方式
1、对称加密
采用单钥的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
2、对称加密算法
常见加密算法:
- DES : Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。
- AES : Advanced Encryption Standard, 高级加密标准 .在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
3、== Base64介绍==
Base64是网络上最常见的用于传输8Bit字节码的可读性编码算法之一,可读性编码算法不是为了保护数据的安全性,而是为了可读性。
可读性编码不改变信息内容,只改变信息内容的表现形式。
Base64算法原理
base64 是 3个字节为一组,一个字节 8位,一共 就是24位 ,然后,把3个字节转成4组,每组6位,缺少的2位,会在高位进行补0 。
这样做的好处在于 ,base取的是后面6位,去掉高2位 ,那么base64的取值就可以控制在0-63位了,所以就叫base64。
base64 构成原则
① 小写 a - z = 26个字母
② 大写 A - Z = 26个字母
③ 数字 0 - 9 = 10 个数字
④ + / = 2个符号
4、toString()与new String ()用法区别
七、加密模式
八、填充模式
九、消息摘要
- 消息摘要(Message Digest)又称为数字摘要(Digital Digest)
- 它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生。
- 使用数字摘要生成的值是不可以篡改的,为了保证文件或者值的安全。
1、特点
无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。例如应用MD5算法摘要的消息有128个比特位,用SHA-1算法摘要的消息最终有160比特位的输出。
只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;但相同的输入必会产生相同的输出。
消息摘要是单向、不可逆的
常见算法 :
- MD5
- SHA1
- SHA256
- SHA512
【补充】SHA-256 是加密算法还是摘要算法 ?
SHA-256 是一种摘要算法,也称为哈希算法,并非加密算法。
区别:
- 摘要算法(哈希算法):将任意长度的输入通过哈希函数生成固定长度的输出(称为哈希值或摘要),用于验证数据完整性。摘要算法是不可逆的,也就是说无法通过哈希值还原原始数据。SHA-256 属于这个类别。
- 加密算法:用于将明文转换为密文的过程,是可逆的,需要密钥才能加密和解密。常见的加密算法有 AES、RSA 等。
SHA-256 特点:
- SHA-256 产生 256 位(32 字节)的固定长度哈希值。
- 主要用于数据完整性校验和数字签名,不用于加密数据。
因此,SHA-256 是一种摘要算法,而非加密算法。
十、非对称加密
1、什么是非对称加密
① 非对称加密算法又称现代加密算法。
② 非对称加密是计算机通信安全的基石,保证了加密数据不会被破解。
③ 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey) 和私有密(privatekey)
④ 公开密钥和私有密钥是一对
⑤ 如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。
⑥ 如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。
⑦ 因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
2、特点
加密和解密使用不同的密钥
如果使用私钥加密, 只能使用公钥解密
如果使用公钥加密, 只能使用私钥解密
处理数据的速度较慢, 因为安全级别高
3、常见算法
RSA
ECC
4、生成公钥和私钥
十一、数字签名
1、数字签名是什么?
数字签名就是在网络中传输数据时候,给数据添加一个数字签名,表示是谁发的数据,而且还能证明数据没有被篡改。
数字签名的主要作用就是保证了数据的有效性(验证是谁发的)和完整性(证明信息没有被篡改)
2、基本过程
数字签名是一种确保数据完整性、身份验证和防止篡改的技术。以下是数字签名的整个过程:
1. 生成密钥对
数字签名使用非对称加密算法,如RSA或ECC。用户需要生成一对密钥:
- 私钥:用于签名的加密密钥,保密。
- 公钥:用于验证签名的公开密钥,公开。
2. 消息摘要(Hash)
- 在进行数字签名之前,首先要对待签名的数据进行哈希处理。哈希函数(如SHA-256)将任意长度的消息转换为固定长度的消息摘要(digest)。
- 该消息摘要是一个唯一的值,任何消息的微小改变都会导致摘要发生显著变化。
3. 签名生成
- 使用私钥对消息摘要进行加密。加密后的摘要就是数字签名。
- 这个数字签名与原始消息一起发送。
4. 签名验证
接收方通过以下步骤验证签名:
- 消息摘要重算:接收方使用相同的哈希函数对收到的原始消息进行哈希处理,生成消息摘要。
- 签名解密:使用发送方的公钥解密数字签名,得到消息摘要。
- 摘要比较:比较接收方重新计算的消息摘要与解密出的消息摘要。如果二者一致,则签名有效,表明消息未被篡改,且签名确实是由持有私钥的人生成的。
5. 验证完整性和身份
- 如果签名验证通过,接收方可以确信:
- 消息没有被篡改,因为哈希摘要一致。
- 消息确实来自持有私钥的人,从而验证了发送方的身份。
这是数字签名的基本过程,用于在数字通信中确保数据安全、完整性和身份认证。
3、数字证书
上面提到我们对签名进行验证时,需要用到公钥。如果公钥是伪造的,那我们无法验证数字签名了,也就根本不可能从数字签名确定对方的合法性了。这时候证书就闪亮登场了。