CRYPT
密码学与隐写术不同,密码学隐藏的是信息的含义,不隐藏信息,而隐写术是隐藏信息
古典密码
- 凯撒密码
- 维吉尼亚密码
- 栅栏密码
现代密码
对称密码
DES
AES
RC4
SM4
非对称密码
- RSA
- ECC
- ElGamal
- DSA
- ECD SA
哈希密码
- MD5
- SHA
- SHA-3
- SM3
凯撒密码
维吉尼亚密码
栅栏密码
DES加密原理
DES算法属于对称加密中的分组加密算法
密钥长64位,56位参与运算,其余8位为校验位。(8,16,24,32,40,56,64)
当n个64位铭文数据块都经过DES加密处理后,所得到的n个64位密文数据块串在一起就是密文。
AES加密原理
RC4
SM4
RSA 加密原理
一、RSA 加密与解密过程
RSA 是一种公钥加密算法,其核心在于利用模运算进行加密和解密操作,同时基于特定数学原理保证安全性。
1. 加密
将原始数据表示为一个数m(即原始信息),通过公钥(e, N)对其进行加密。加密公式为
$$
m^e\ mod\ N = c
$$
其中e为公钥中的加密指数,N为一个大数,c为得到的密文。
2. 解密
使用私钥d对密文c进行解密,解密公式为
$$
c^d\ mod\ N = m
$$
通过这两个公式可以推导出
$$
m^{ed}\ mod\ N = m
$$
这就表明了加密与解密过程的可逆性。
二、关键参数计算
在 RSA 算法中,如何选取e,d的值是最为关键的问题,这涉及到欧拉定理的应用。
1. 欧拉定理
$$
m^{\varphi(n)}\equiv 1\ (mod\ n),其中\varphi(n)为欧拉函数,表示小于或等于n的正整数中与n互质的数的个数。
$$
2. 参数推导
对欧拉定理公式进行变换,先在等式两端同时取k次幂(k为任意正整数),接着在两端同时乘m,最后将模运算写在等式左边,得到
$$
m^{k\varphi(n)}\equiv 1\ (mod\ n)\qquad m^{k\varphi(n)}*m\equiv m\ (mod\ n)\qquad 即:m^{k\varphi(n)+1}\ mod\ n = m
$$
与加密解密公式对应,可得到
$$
ed = k\varphi(n)+1\qquad 即:d=\frac{k\varphi(n)+1}{e}
$$
3. 欧拉函数性质
当n为质数时,有
$$
\varphi(p)=p - 1
$$对于任意两个互质的整数p,q,有
$$
\varphi(pq)=\varphi(p)\varphi(q)
$$
三、公钥与私钥生成示例
以两个质数p = 17,q = 23为例,n = pq = 391,则
$$
\varphi(391)=\varphi(17)\varphi(23)=352
$$
取e = 3(需保证e与n的欧拉函数值互质),在k = 5的情况下,计算私钥d:
$$
d=\frac{k\varphi(n)+1}{e}=\frac{5352+1}{3}=587
$$
算法将e和n公布作为加密时的公钥,而d保存下来作为解密时的私钥。由于其他人难以知道p和q这两个质因数,无法计算出n的欧拉函数值,从而难以破译私钥d。
四、加解密示例
假设要加密的字符为“a”,其对应的 ASCII 码为97,即m = 97。使用公钥(e = 3, N = 391)进行加密:
$$
97^3\ mod\ 391 = 79
$$
这里79为密文。
为了解密,使用私钥d = 587进行计算:
$$
79^{587}\ mod\ 391 = 97
$$
得到原始数据97。
五、快速幂算法实现
以下是使用快速幂算法求模的 Python 代码,用于在加密和解密过程中高效计算幂次取模:
1 | def quick_pow(c, d, n): |