一、古典密码
1.凯撒密码
凯撒密码(Caesar cipher)是一种简单的替换密码,也被称为移位密码。它是由古罗马军事领袖凯撒·尤利乌斯·凯撒(Julius Caesar)在公元前1世纪使用的一种加密技术。
凯撒密码的原理很简单:通过将明文中的每个字母按照一个固定的偏移量(位移量)向右(或向左)移动,来加密和解密文本。例如,如果偏移量为3,那么字母"A"将被替换为字母"D",字母"B"将被替换为字母"E",以此类推。
-
偏移量:凯撒密码的关键是偏移量。偏移量指定了明文字母向右(或向左)移动的距离。常用的偏移量是3,也就是所谓的凯撒密码(Caesar cipher)。
-
字母循环:在凯撒密码中,字母的移动是循环的。也就是说,当字母达到字母表的末尾时,它将重新回到字母表的开头继续移动。
-
加密过程:对于加密,将明文中的每个字母按照偏移量向右移动。例如,如果明文是"HELLO",偏移量为3,则加密后的密文为"KHOOR"。
-
解密过程:对于解密,将密文中的每个字母按照偏移量向左移动。例如,如果密文是"KHOOR",偏移量为3,则解密后的明文为"HELLO"。
-
大小写敏感:凯撒密码是大小写敏感的,也就是说,大写字母和小写字母在加密和解密过程中被视为不同的字符。
-
弱加密算法:凯撒密码是一种非常简单的加密算法,很容易受到暴力破解的攻击。由于只有26种可能的偏移量,可以通过尝试每个偏移量并解密密文来快速破解凯撒密码。
2.维吉尼亚密码
维吉尼亚密码(Vigenère cipher)是一种基于多个凯撒密码组合而成的加密算法,由布鲁托·德维吉尼亚(Blaise de Vigenère)在16世纪提出。相比于凯撒密码,维吉尼亚密码更加复杂和安全。
-
密钥:维吉尼亚密码使用一个密钥来加密和解密文本。密钥是一个字符串,通常由一个或多个字母组成。密钥的长度可以与明文的长度相同,也可以比明文长。
-
重复密钥:维吉尼亚密码中的关键概念是重复密钥。如果密钥比明文短,则会将密钥重复使用直到与明文长度相匹配。例如,如果明文是"HELLO",而密钥是"KEY",则密钥将被重复使用为"KEYKE"。
-
字母表表格:维吉尼亚密码使用一个字母表表格(也称为Vigenère Square)来进行加密和解密。字母表表格是一个26x26的矩阵,包含了所有字母在凯撒密码中的偏移结果。
-
加密过程:对于加密,将明文中的每个字母与对应位置的密钥字母相匹配,找到字母表表格中对应位置的字母,即为密文。例如,如果明文是"HELLO",密钥是"KEY",则将"H"与"K"匹配,得到密文中的第一个字母,以此类推。
-
解密过程:对于解密,将密文中的每个字母与对应位置的密钥字母相匹配,找到字母表表格中对应行的字母,即为明文。例如,如果密文是"RIJVS",密钥是"KEY",则将"R"与"K"匹配,得到明文中的第一个字母,以此类推。
维吉尼亚密码表
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
-------------------------------------------------------
A | A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B | B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
C | C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D | D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
E | E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
F | F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G | G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H | H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I | I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J | J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K | K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L | L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M | M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
N | N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
O | O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P | P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q | Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R | R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
S | S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T | T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U | U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V | V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W | W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
X | X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y | Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z | Z A B C D E F G H I J K L M N O P Q R S T U V W X Y
二、现代密码
1.RSA密码
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,是公钥密码学的基础之一。RSA算法使用一对密钥,包括公钥和私钥,其中公钥用于加密数据,私钥用于解密数据。以下是一些RSA的基础知识:
-
公钥和私钥:RSA算法使用两个密钥,公钥和私钥。公钥是可以公开的,用于加密数据。私钥是保密的,用于解密数据。加密的数据只能用私钥来解密,确保了数据的机密性和安全性。
-
密钥生成:RSA算法的密钥生成过程包括以下步骤:
- 选择两个不同的质数p和q。
- 计算n = p * q,其中n是公钥和私钥的一部分,称为模数。
- 计算欧拉函数φ(n) = (p-1) * (q-1)。
- 选择一个与φ(n)互质的整数e,称为公钥指数,满足1 < e < φ(n)。
- 计算私钥指数d,使得 (d * e) mod φ(n) = 1。
- 最终生成的公钥是(n, e),私钥是(n, d)。
-
加密过程:使用公钥加密数据的过程如下:
- 将明文数据转换为一个整数,通常使用某种编码方案,如ASCII或Unicode。
- 使用公钥中的指数e和模数n,对明文数据进行加密,得到密文。
- 密文可以通过公开的方式传输,因为只有私钥才能解密。
-
解密过程:使用私钥解密数据的过程如下:
- 使用私钥中的指数d和模数n,对密文数据进行解密,得到明文数据。
- 解密过程利用了私钥指数d和公钥指数e的数学关系。
-
数字签名:RSA算法还可以用于数字签名,确保数据的完整性和认证性。数字签名是对数据进行加密的过程,使用私钥对数据进行签名,并使用公钥对签名进行验证。只有拥有私钥的一方才能生成有效的数字签名,而任何人都可以使用公钥验证签名的有效性。