版权声明:最短的时间最核心的知识,有疑问,欢迎进行留言。 https://blog.csdn.net/lizhidefengzi/article/details/86661629
RSA加密算法
RSA加密算法是一种非对称加密算法。应用场景:
加密特点:相对安全、加密效率低、加密数据小
使用RSA加密算法完整的流程是:
- 产生对应的公钥和私钥
- 使用算法对数据加密
- 使用对应算法对加密后的数据解密
1.公钥私钥的产生
涉及到几个概念:欧拉函数、模逆元,我们逐个看一下
欧拉函数
概念:任意给定正整数n,求出在小于等于n的正整数之间有多少个与n构成互质关系。
计算这个值的方式叫做欧拉函数,使用
表示如
,计算8的欧拉函数,1、2、3、4、5、6、7、8,其中1357互质,个数为4.
,1、2、3、4、5、6均是,个数为6.
函数特点
模逆元
概念:也称模反元素,如果两个正整数e和x互质,那么一定可以找到整数d,是的ed-1被x整除。
对应的
,此时d就是e的对于x的模反元素。
2.加密消息
3.解密消息
整理流程图
其中:
公钥:n和e
私钥:n和d
明文:m
密文:m
说明:
1.n会非常大,长度一般为1024个二进位,目前人类已经分解的最大整数,232个十进制比特位,768个二进制位。
2.由于要求出
,根据欧拉函数特点,最简单的方式就是n由两个质数相乘得到p1,p2,
3.最终由
得到e和d,根据上面的模反元素。
关于RSA的安全:
除了公钥用到了n和e其余4个数字是不公开的,目前破解RSA得到d的方式如下:
1.要想求出d,由于
。
2.e是知道的,但是要知道
.,必须知道p1和p2.
3.由于n=p1*p2.只有将n因数分解才能算出来。
终端命令演示
Mac系统内置了OpenSSL(开源加密库),所以我们可以直接使用敏玲来玩RSA,
命令 | 含义 |
---|---|
genrsa | 生成并输入一个RSA私钥 |
rsautl | 使用RSA秘钥进行加密、解密、签名、验证等运算 |
rsa | 处理RSA秘钥的格式转换等问题 |
- 生成RSA秘钥,秘钥长度为1024bit.
- 从私钥中提取公钥
-生成文件如下
- 将私钥转换成明文
- 通过公钥加密数据,私钥解密数据
- 通过私钥进行加密,公钥解密数据
代码方式实现:
//1.加载公钥
[[RSACryptor sharedRSACryptor] loadPublicKey:[[NSBundle mainBundle] pathForResource:@"rsacert.der" ofType:nil]];
//2.加载私钥
[[RSACryptor sharedRSACryptor] loadPrivateKey: [[NSBundle mainBundle] pathForResource:@"p.p12" ofType:nil] password:@"123456"];
NSData * result = [[RSACryptor sharedRSACryptor] encryptData:[@"hello" dataUsingEncoding:NSUTF8StringEncoding]];
//base64编码
NSString * base64 = [result base64EncodedStringWithOptions:0];
NSLog(@"加密之后:%@\n",base64);
//解密
NSData * dcStr = [[RSACryptor sharedRSACryptor] decryptData:result];
NSLog(@"%@",[[NSString alloc] initWithData:dcStr encoding:NSUTF8StringEncoding]);