RSA 算法的加密解密过程

1、算法原理

    算法本身基于一个简单的数论知识:给出两个素数,很容易将它们相乘,然而给出它们的乘积,想得到这两个素数就显得尤为困难。如果能够解决大整数(比如几百位的整数)分解的快速方法,那么 RSA 算法将轻易被破解。

2、公钥和私钥的生成

1.选择两个大素数p和q(典型值为1024位)

2.计算n=p×q和z=(p-1)×(q-1) // z为n的欧拉函数

3.选择一个与z互质的数,令其为e

4.计算e在模z域上的逆元d。即满足     exd(mod z)= 1

5.公开密钥为(e,n),私有密钥为(d,n)

3、RSA 加密

对于明文x,用公钥(e,n)对x加密的过程,就是将x转换成数字,然后通过幂取模运算出y,其中y就是密文:

                                                         y=x^e mod n

4、RSA 解密

对于密文y,用私钥(d,n)对y进行解密的过程,同样是计算幂取模:

                                                        x=y^d mod n

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RSA算法是一种非对称加密算法,它的加密解密使用的是不同的密钥,其中公钥用于加密,私钥用于解密RSA算法是目前应用最广泛的公钥加密算法之一。 RSA算法加密过程如下: 1. 首先选择两个质数p和q,并计算它们的乘积n=p*q; 2. 选择一个整数e,使得e与(p-1)*(q-1)互质; 3. 计算d,使得d*e ≡ 1 (mod (p-1)*(q-1)); 4. 将n和e作为公钥,n和d作为私钥; 5. 要加密明文m,计算c ≡ m^e (mod n),得到密文c。 RSA算法解密过程如下: 1. 使用私钥(n,d)解密密文c,得到明文m ≡ c^d (mod n)。 下面是RSA算法的加解密示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> // 计算a^b mod n int mod_pow(int a, int b, int n) { int result = 1; a = a % n; while (b > 0) { if (b & 1) { result = (result * a) % n; } b >>= 1; a = (a * a) % n; } return result; } // 求最大公约数 int gcd(int a, int b) { if (b == 0) { return a; } return gcd(b, a % b); } // 计算d*e ≡ 1 (mod (p-1)*(q-1)) int calc_d(int e, int p, int q) { int fn = (p - 1) * (q - 1); int d = 0; while (1) { d++; if ((d * e) % fn == 1) { break; } } return d; } // 加密 int encrypt(int m, int e, int n) { return mod_pow(m, e, n); } // 解密 int decrypt(int c, int d, int n) { return mod_pow(c, d, n); } int main() { int p = 61, q = 53; // 选择两个质数p和q int n = p * q; // 计算n int fn = (p - 1) * (q - 1); // 计算(p-1)*(q-1) int e = 17; // 选择e,使得e与fn互质 int d = calc_d(e, p, q); // 计算d printf("公钥:(%d,%d)\n", n, e); printf("私钥:(%d,%d)\n", n, d); // 加密明文m int m = 12345; int c = encrypt(m, e, n); printf("明文:%d,密文:%d\n", m, c); // 解密密文c int dm = decrypt(c, d, n); printf("解密密文:%d\n", dm); return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值