对称加密
简单举个例子,A要给B发信息是“love”,A和B商量好,加密过程是把信息的每个字母向后挪动一位(这里假设发送的都是字母,比如要发送“a”,但实际发送出去的则是“b”),解密过程则是将收到的信息向前挪动一位(比如收到的是“b”,解密出来的则是“a”)。那么A先将"love"的每个字母往后挪一位,转换成“mpwf”,B收到“mpwf”,然后把"mpwf"每个字母往前挪一位,转换成"love"。
这只是举个例子,但是实际的加密方式比这个复杂的多。
这种方式是A,B均知道解密过程。
非对称加密
这里还是假设A给B发信息。但是使用非对称加密算法加密的。
A只知道怎么加密,但是不知道怎么解密,A怎么加密也是B告诉的。类似于,A要给B发信息,那么B就给A一个盒子,告诉A,A把要发送的信息放进盒子里,锁上就行,钥匙在B那,只有B能开这个盒子。
非对称加密算法相对于对称加密算法,就是秘钥只掌握在一个人手里。
那么RSA怎么做到的呢?(以下的代数都是正整数)
- 发送方选择两个大质数,分别是p,q,N = p * q。
- 使用欧拉函数 f(N) = (p-1)(q-1) = f,计算小于等于N,且与N互质的数。
- 选择一个e,1<e<f,且e与f互质。
- e*d%f = 1,求出d。
- 那么就得到了私钥(N,e),公钥(N,d)。
公钥是用来加密的,私钥是用来解密的。
举个例子
为了方便计算,这里选择两个小的质数作为例子。
- 假设B选择的两个质数是p=2,q=11,N=2*11=22
- f=(2-1)(11-1) = 10
- 假设e选择3,e=3
- d = 7
- 私钥(22,3),公钥(22,7)
假设A发送的信息是:9
加密过程:
9**7 % 22 = 4782969 = 15
则B接收到的信息是 15
解密过程:
15**3 % 22 = 3375 = 9
这种方法只适合仅有B有A的公钥。不是很安全。
更安全的做法是A做两次加密:
- 第一次:A使用A的私钥加密
- 第二次:A用B的公钥加密
B解密也需要进行两次解密
- 第一次:B使用B的私钥解密
- 第二次:B使用A的公钥解密
这种双重加密保证了只有B才能将明文转换为密文。