网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

密码学中的RSA算法

更新时间:2026年03月27日   作者:spoto   标签(Tag):

RSAR投资S哈米尔ADleman算法是一种……不对称的or 公钥密码学这是一种算法,它基于两个不同的密钥来运作。公钥以及私钥公钥被用于……加密而私钥则被用于……解密而接收者必须严格保密这些信息。RSA算法的名称来源于Ron的名字。R伊斯特,阿迪S哈米尔和伦纳德ADleman在1977年发表了这一算法。

非对称加密技术的示例:

如果“Person”指的是一个人或个体,那么可以翻译为“那个人/这个个体”。A希望能够安全地向“Person”发送消息。B:

  • A加密使用B人的信息来传达消息。公众关键词。
  • B人解密使用他们的信息来传达消息。私人的/个人的关键词:

RSA算法

RSA算法是基于某种原理或方法而设计的。因式分解数量庞大模运算用于加密和解密数据。它包含三个主要阶段:

  1. 密钥生成:创建公钥和私钥
  2. 加密:发送方使用公钥对数据进行加密处理。密文.
  3. 解密:解密/解码密文使用私钥来获取原始数据。

密钥生成

  • 请选择两个较大的质数,比如……p还有q这些质数应该被保密起来。
  • 计算所有质数的乘积。n = p * q该产品既属于公共密钥的一部分,也属于私有密钥的一部分。
  • 计算/运算欧拉函数Φ(n)as Φ(n) =Φ(p * q) = Φ(p) * Φ(q) = (p - 1) * (q - 1)。
  • 请选择加密指数。e这样,使得……
    • 1 < e < Φ(n),并且
    • gcd(e, Φ(n)) = 1,也就是说,e必须与Φ(n)互质。
  • 计算解密指数d, 以便/使得
    • (d * e) ≡ 1 (mod Φ(n))也就是说,d就是……模乘逆元 of e mod Φ(n)。计算乘法逆元的一些常见方法包括:扩展欧几里得算法, 费马小定理等等。
    • 我们可以拥有多个满足条件的d值。(d * e) ≡ 1 (mod Φ(n))不过,我们选择哪个值其实并不重要,因为所有这些值都是有效的密钥,而且它们在解密时都会产生相同的消息。

最后,就是……公钥 = (n, e)以及…私钥 = (n, d).

2. 加密

为了对消息进行加密处理M首先,它会被转换为数字形式,使用ASCII码和其他编码方式来表示。接下来,使用公钥(n, e)来加密消息,然后通过以下公式得到密文:

C = Memod n其中,C表示加密后的文本,而e和n则属于公钥的组成部分。

3. 解密

为了解密这些加密文本C使用私钥(n, d),然后利用以下公式来获取原始数据:

M = Cdmod n其中,M表示消息,而d和n则分别表示私钥的组成部分。

RSA算法的示例

RSA算法的核心思想

RSA算法的原理在于:分解一个大整数是非常困难的。公钥由(n, e)表示,其中n和e是公开的;而私钥则由(n, d)表示。因为只有接收者知道d的值,所以他们才能解密消息的内容。但是,是否有可能利用 n 和 e 来求出 d 的值呢?

我们知道这一点。(d * e) ≡ 1 (mod Φ(n))那么,如果我们能够计算出这个数值的话……Φ(n),我们可以找到这个值。d但是Φ(n) = (p - 1) * (q - 1)。所以,我们需要得到 p 和 q 的值。不过,有人可能会认为,找到 p 和 q 的值其实并不难。n = p * q而n的值其实已经为人所知了。不过,RSA算法要求p和q的值必须非常大,这样一来,n的值也会变得极其巨大。如此庞大的数值进行分解在计算上是不可能的。

因此,加密强度取决于这些数值的大小。p 以及qRSA密钥通常的长度为1024位或2048位。不过,专家们认为,1024位的密钥很快就会被破解。不过,目前来看,这似乎是一项不可行的任务。

注意:如果有人能够认识到这种事物的价值的话……p 以及q那么,他就可以计算出那个数值了。d 然后,对这条消息进行解密处理。

RSA算法的实现

C++
// 用于实现RSA算法的C++程序#include<bits/stdc++.h>使用命名空间标准;// 该函数用于计算 base 的 expo 次方除以 m 的余数整数力量/权力(整数基础/起点,整数展览会,整数m){整数结果/后果=1;基础/起点=基础/起点%m;当…的时候(展览会>0){if(展览会&1)结果/后果=(结果/后果*1LL*基础/起点)%m;基础/起点=(基础/起点*1LL*基础/起点)%m;展览会=展览会/2;}返回结果/后果;}// 该函数用于计算 e 在 phi(n) 模下的模逆元。// 在这里,我们使用“尝试与错误”的方法来计算phi(n)。// 但是,我们可以使用扩展欧几里得算法来优化它。整数modInverse(整数e,整数φ){为了(整数d=2;d<φ;d++){if((e*d)%φ==1)返回d;}返回-1;}// RSA密钥生成无效/无意义生成密钥(整数&e,整数&d,整数&n){整数p=7919;整数q=1009;n=p*q;整数φ=(p-1)*(q-1);// 选择满足以下条件的最小整数e:1 < e < phi(n),并且gcd(e, phi(n)) = 1为了(e=2;e<φ;e++){if(__gcd(e,φ)==1)打破/终止;}// 计算一个整数 d,使得 e * d ≡ 1 (mod phi(n)) 成立。d=modInverse(e,φ);}// 使用公钥 (e, n) 对消息进行加密整数加密(整数m,整数e,整数n){返回力量(m,e,n);}// 使用私钥 (d, n) 对消息进行解密整数解密(整数c,整数d,整数n){返回力量(c,d,n);}整数主要/核心(){整数e,d,n;// 密钥生成生成密钥(e,d,n);cout<<公钥 (e, n):(“<<e<<<<n<<")\n";cout<<私钥 (d, n):)<<d<<<<n<<")\n";// 消息整数M=123;cout<<原始消息:“<<M<<结束;// 对消息进行加密处理整数C=加密(M,e,n);cout<<加密消息:<<C<<结束;// 解密消息整数解密完成=解密(C,d,n);cout<<解密后的信息:“<<解密完成<<结束;返回0;}
Java
// 用于实现RSA算法的Java程序进口java.math.BigInteger;类/类别 GfG{// 该函数用于计算 base^expo 对 m 取模后的结果,使用 BigInteger 数据类型进行运算。静态的BigInteger力量/权力(BigInteger基础/起点,BigInteger展览会,BigIntegerm){返回基础/起点.modPow(展览会,m);}// 该函数用于计算 e 在 phi(n) 模下的模逆元。静态的BigIntegermodInverse(BigIntegere,BigIntegerφ){返回e.modInverse(φ);}// RSA密钥生成静态的无效/无意义生成密钥(BigInteger[]钥匙){BigIntegerp=新的BigInteger(7919);BigIntegerq=新的BigInteger(1009);BigIntegern=p.乘法(q);BigIntegerφ=p.减去(BigInteger.一个).乘法(q.减去(BigInteger.一个));// 选择满足以下条件的最小整数e:1 < e < phi(n),并且gcd(e, phi(n)) = 1BigIntegere=BigInteger.;为了(e=新的BigInteger(“2”);e.比较操作(φ)<0;e=e.添加(BigInteger.一个)){if(e.GCD(φ).等于(BigInteger.一个)){打破/终止;}}// 计算一个整数 d,使得 e * d ≡ 1 (mod phi(n)) 成立。BigIntegerd=modInverse(e,φ);钥匙[0]=e;// 公钥 (e)钥匙
              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料