前言
本文的RSA例子代码更新在我的github上。
RSA算法是最重要算法之一,它是计算机通信安全的基石,保证了加密数据不会被破解。本文主要参考了参考资料中的文章,介绍一下RSA算法的内容,自己写一遍,算是学习了。
历史
1.对称加密算法
在1976年以前,所有的加密方法都是同一种模式“对称加密算法”(Symmetric-key algorithm):
- (1)甲方选择某一种加密规则,对信息进行加密;
- (2)乙方使用同一种规则,对信息进行解密。
这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。
2.非对称加密算法
1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为“Diffie-Hellman密钥交换算法”。
- (1)甲要传密信给乙,乙先根据某种算法得出本次与甲通信的公钥与私钥
- (2)乙将公钥传给甲(公钥可以让任何人知道,即使泄露也没有任何关系)
- (3)甲使用乙传给的公钥加密要发送的信息原文m,发送给乙密文c
- (4)乙使用自己的私钥解密密文c,得到信息原文m
如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。
3.RSA算法的出现
1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。
这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。
数论知识
1.质数
一个大于1的自然数,除了1和它本身外,不能被其他自然数整除(除0以外)的数称之为质数(素数);否则称为合数。
2.互质数
互质,又称互素。若N个整数的最大公因子是1,则称这N个整数互质。
3.指数运算
指数运算又称乘方计算,计算结果称为幂。*nm
指将*n自乘m次。把*nm
*看作乘方的结果,叫做”n的m次幂”或”n的m次方”。其中,n称为“底数”,m称为“指数”。
4.模运算
<