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

772 阅读2分钟

RSA加密算法

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

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

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

1.公钥私钥的产生

1.公钥与私钥的产生.

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

欧拉函数

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

函数特点 欧拉函数特点

模逆元

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

2.加密消息

加密消息

3.解密消息

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