对称加密
对称加密是加密和解密采用相同的密钥,代表算法AES、DES。
这个加密模式有一个很大的缺点:假设信息由甲方传输给乙方,甲方采用密钥进行加密,那么必须想办法把密钥告诉乙方。如何保存和传输密钥就成了一件很麻烦的事情。
非对称加密
非对称加密需要两份密钥:公钥和私钥。用公钥加密的数据需要用私钥来解密,用私钥加密的数据要用公钥来解密,代表算法RSA。
以RSA算法为例,在加密之前首先要生成公钥和私钥
- 随机选择两个质数p=61;q=53;(质数越大,越难破解)
- 计算两个质数的乘积:n=61 * 53=3233,二进制就是110010100001,这个密钥是12位到的,实际应用中的RSA一般为1024位或者2048位
- 计算n的欧拉函数φ(n) φ(n) = (p-1)(q-1) = 3120
- 随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。比如选择 e = 17
- 计算e对于φ(n)的模反元素d。所谓"模反元素"就是指有一个整数d,可以使得ed被φ(n)除的余数为1。找到一组整数解,可以得出 d = 2753
ed - 1 = kφ(n) 即 17d - 1 = k * 3012。
则(n,e)=(3233,17)为公钥 (n,d)=(3233,2753)为私钥
接着,用公钥对数据进行加密:
RSA加密要求被加密的信息m必须是整数(字符串取ascii或者unicode),且m < n。这里待加密的m = 65,根据公式进行加密,得出加密后的结果c = 2970
m^e ≡ c (mod n) 即 65^17 ≡ c (mod 3233)
c = 2970
按照私钥对c = 2970进行解密
c^d ≡ m (mod n) 即 2970 ^ 2753 = m(mod 3233)
得出 m = 65
对于更长的数据可以采用分段加密,或者采用DES加密数据后,再把密钥用RSA加密。接受者用RSA解密密钥,然后再用DES解密数据。