目录
密码学
密码学是网络安全、信息安全、区块链等产品的基础,常见的非对称加密、对称加密、散列函数等,都属于密码学范畴。
密码学有数千年的历史,从最开始的替换发到如今的非对称加密算法,经历了古典密码学,近代密码学和现代密码学三个阶段。
古典密码学
1. 替换法
替换法就是用固定的信息将原文替换成无法直接阅读的密文信息,有单表替换和多表替换两种形式。
单表替换即只有一张原文密文对照表单,发送者和接收者用这张表单来加密解密。
多表替换即有多张原文密文对照表单,不同字母可以用不同表单的内容替换。
2. 移位法
移位法就是将原文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后得出密文,典型的移位法应用有 “ 恺撒密码 ”。
现代密码学
1. 散列函数
散列函数也称哈希函数,可将任意长度的消息经过运算,变成固定长度数值,常见的有MD5、SHA-1、SHA256,多应用在文件校验、数字签名中。
MD5可以将任意长度的原文件生成一个128位(16字节)的哈希值。
SHA-1可以将任意长度的原文件生成一个160位(20字节)的哈希值。
2. 对称密码
对称加密应用了相同的加密密钥和解密密钥。对称密码分为:序列密码(流密码)、分组密码(块密码)两种。
流密码是对信息流中的每一个元素(一个字母或一个比特)作为基本的处理单元进行加密,块密码是先对信息流分块。再对每一块分别加密。
3. 非对称密码
对称密码的密钥安全极其重要,加密这和解密这需要提前协商密钥,并各自确保密钥的安全性,一旦密钥泄露,即使算法是安全的也无法保障原文信息的私密性。
在世界的使用中,远程的提前协商密钥不容易实现,及时协商好,在远程传输过程中也容易被他人获取,因此非对称密钥就凸显出了优势。
非对称密码有两支密钥,公钥和私钥,加密和解密运算使用的密钥不同。用公钥对原文进行加密后,由私钥进行解密;用私钥对原文进行加密后(此时一般称为签名),需要由公钥进行解密(此时一般称为验签)。公钥可以公开的,大家使用公钥对信息进行加密,再发送给私钥持有者,私钥持有者使用私钥对信息进行解密,获得信息原文。因此私钥只有单一人持有,故不用担心被他人解密获取信息原文。
ASCII编码
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
Byte和bit
Byte : 字节. 数据存储的基本单位,比如移动硬盘1T , 单位是byte
bit : 比特, 又叫位. 一个位要么是0要么是1. 数据传输的单位 , 比如家里的宽带100MB,下载速度并没有达到100MB,一般都是12-13MB,那么是因为需要使用 100 / 8
关系: 1Byte = 8bit
获取字符串byte
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);
}
}
}
97
byte对应bit
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);
}
}
}
97
1100001
运行程序
打印出来应该是8个bit,但前面是0,没有打印 ,从打印结果可以看出来,一个英文字符 ,占一个字节。
在中文情况下:
如果使用的是utf-8编码格式,一个中文对应3个字节。
如果使用的是gbk编码格式,一个中文对应2个字节。
在英文情况下
英文在不同的编码格式占用的字节是一样的。没有编码的概念,全部对应的是一个字节。
常见加密方式
1. 对称加密
- 采用单钥密码系统的加密方法,统一密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称单密钥加密。
- 示例
- 我们现在有一个原文3要发送给B
- 设置密钥为108, 3 * 108 = 324, 将324作为密文发送给B
- B拿到密文324后, 使用324/108 = 3 得到原文
- 常见加密算法
- DES : Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。
- AES : Advanced Encryption