小白都能看的懂的RSA密码算法原理

RSA加密算法

RSA加密算法是一种非对称加密算法。应用场景:
加密特点:相对安全、加密效率低、加密数据小

使用RSA加密算法完整的流程是:

  1. 产生对应的公钥和私钥
  2. 使用算法对数据加密
  3. 使用对应算法对加密后的数据解密

1.公钥私钥的产生

1.公钥与私钥的产生.

涉及到几个概念:欧拉函数、模逆元,我们逐个看一下

欧拉函数

概念:任意给定正整数n,求出在小于等于n的正整数之间有多少个与n构成互质关系。
计算这个值的方式叫做欧拉函数,使用 ϕ ( n ) \phi (n) ϕ(n)表示如 ϕ ( 8 ) = 4 \phi(8)=4 ϕ(8)=4,计算8的欧拉函数,1、2、3、4、5、6、7、8,其中1357互质,个数为4.
ϕ ( 7 ) = 6 \phi(7)=6 ϕ(7)=6,1、2、3、4、5、6均是,个数为6.

函数特点
欧拉函数特点

模逆元

概念:也称模反元素,如果两个正整数e和x互质,那么一定可以找到整数d,是的ed-1被x整除。
( e ∗ d ) % x = 1 (e*d)\%x=1 (ed)%x=1对应的
e ∗ d = k ∗ x + 1 e*d=k*x+1 ed=kx+1,此时d就是e的对于x的模反元素。

2.加密消息

加密消息

3.解密消息

在这里插入图片描述
整理流程图综上
其中:
公钥:n和e
私钥:n和d
明文:m
密文:m
说明:
1.n会非常大,长度一般为1024个二进位,目前人类已经分解的最大整数,232个十进制比特位,768个二进制位。
2.由于要求出 ϕ ( n ) \phi(n) ϕ(n),根据欧拉函数特点,最简单的方式就是n由两个质数相乘得到p1,p2, ϕ ( n ) = ( p 1 − 1 ) ( p 2 − 1 ) \phi(n)=(p1-1)(p2-1) ϕ(n)=(p11)(p21)
3.最终由 ϕ ( n ) \phi(n) ϕ(n)得到e和d,根据上面的模反元素。
关于RSA的安全:
除了公钥用到了n和e其余4个数字是不公开的,目前破解RSA得到d的方式如下:
1.要想求出d,由于 e ∗ d = ϕ ( n ) ∗ k + 1 e*d=\phi(n)*k+1 ed=ϕ(n)k+1
2.e是知道的,但是要知道 ϕ ( n ) \phi(n) ϕ(n).,必须知道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]);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值