• 模拟RSA算法完整计算过程的计算


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 2401_84339725 2024-04-19 14:52 采纳率: 0% 浏览 1 首页/ 行业数字化 / 模拟RSA算法完整计算过程的计算 教育电商网络安全算法 以下为一道模拟RSA算法完整计算过程的计算题目(1)取两个素数19和31为源,生成公私钥对,显然其中n=19*31=589,选取公钥为(29,589),求对应的私钥;(2)假定现在有一个用公钥加密的密文为数字123,请解出原本的明文数据a是多少?(3)验证你的解密计算是否正确:计算a^e(mod 589),若相等,说明(1)(2)的计算正确,并给出本步骤中的计算过程和中间数据;否则,回头查找(1)(2)步计算中存在的错误,排除错误直到等式成立 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    2条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-19 14:52
      关注

      引自免费微信小程序:皆我百晓生

      首先,我们按照要求一步步进行计算。

      步骤1:生成公私钥对

      给定两个质数p = 19, q = 31,我们可以计算n = p * q = 19 * 31 = 589。

      接下来,我们需要选择一个与 (p-1)(q-1) 互质的大于1的整数 e,通常选择一个较小的质数,比如 e = 29。因为 (p-1)(q-1) = (19-1)*(31-1) = 648,29 和 648 是互质的。

      步骤2:计算私钥 d

      根据 RSA 算法,私钥 d 满足下面的关系:

      d ≡ e^-1 (mod φ(n))

      其中 φ(n) = (p-1)*(q-1),即 φ(589) = 648。我们需要找到一个整数 d,使得:

      d * e ≡ 1 (mod φ(n))

      使用扩展欧几里得算法可以得到 e 的模逆元 d。在 Python 中,我们可以使用 math.gcd 函数来实现这个过程。

      下面是 Python 代码示例:

      def extended_euclidean(a, b):
          if b == 0:
              return a, 1, 0
          else:
              gcd, x, y = extended_euclidean(b, a % b)
              return gcd, y, x - (a // b) * y
      
      # 计算模逆元
      phi_n = (p-1)*(q-1)
      gcd, d, _ = extended_euclidean(e, phi_n)
      d %= phi_n
      

      运行这段代码后,我们会得到 d 的值。

      步骤3:加密过程

      使用公钥 (e, n) 对明文 a 进行加密,密文 c = a^e mod n。题目中给定的密文是 123,所以我们需要检查是否能通过解密恢复到原始的 a 值。

      步骤4:解密过程

      使用私钥 (d, n) 解密密文 c,得到明文 a' = c^d mod n。我们将 a' 与原始的 a 值比较,看它们是否相等。

      下面是 Python 代码示例:

      # 给定的密文
      c = 123
      
      # 使用私钥解密
      a_prime = pow(c, d, n)
      
      # 检查解密结果
      if a_prime == a:
          print("解密正确,原文 a =", a)
      else:
          print("解密错误,原文可能不是 a =", a)
      

      将实际的 a 值替换到代码中,然后运行这段代码。如果输出 "解密正确",那么意味着你在步骤1、步骤2和步骤3中的计算都是正确的。如果输出 "解密错误",你需要重新检查你的计算,尤其是私钥 d 是否正确。

      注意:在这个例子中,由于题目没有提供原始的明文 a,你需要自己设置一个明文 a 来进行测试。例如,你可以尝试设置 a = 123,然后按照上述步骤进行加密和解密操作。如果你的计算正确,最终解密后的 a' 应该等于你开始设置的 a 值。

      展开全部

      评论 编辑记录
    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-19 14:53
      关注

      下午好🌅🌅🌅
      本答案参考ChatGPT-3.5

      根据题目中给出的信息和RSA算法的原理,我们可以按照以下步骤来计算:

      (1) 求取私钥d的过程:

      首先,计算n = 19 * 31 = 589。 然后,根据公式 e * d ≡ 1 (mod φ(n)),我们需要求出私钥d,其中e为公钥中的指数,φ(n)为欧拉函数值。

      计算 φ(n) = (19-1) * (31-1) = 540。

      我们需要找到一个数d,满足 (e * d) % φ(n) = 1。 根据欧几里得算法,我们可以使用扩展欧几里得算法来求解。

      扩展欧几里得算法的步骤如下:

      1. 初始化 r1 = φ(n),r2 = e,s1 = 1,s2 = 0,t1 = 0,t2 = 1。
      2. 循环执行以下步骤,直到 r2 = 0:
        • q = r1 / r2
        • r = r1 % r2
        • r1 = r2,r2 = r
        • s = s1 - q * s2
        • s1 = s2,s2 = s
        • t = t1 - q * t2
        • t1 = t2,t2 = t
      3. 当 r2 = 0 时,s1 就是私钥d。

      根据上述步骤,我们得到 d = 269。

      所以私钥为(269, 589)。

      (2) 解密密文的过程:

      给定密文为数字123,我们需要解出原本的明文数据a,即解密过程。

      根据解密的公式 a ≡ c^d (mod n), 其中a为明文,c为密文,d为私钥,n为模数。

      计算 a ≡ 123^269 (mod 589)。 我们可以使用模幂运算来简化计算。

      (3) 验证解密计算的正确性:

      计算 a^e (mod n),其中e为公钥中的指数,n为模数。

      计算 a^29 (mod 589)。 我们可以使用模幂运算来简化计算。

      如果最终计算结果与密文123相等,则说明解密计算是正确的。

      计算过程和中间数据如下

      (1)

      • n = 19 * 31 = 589
      • φ(n) = (19-1) * (31-1) = 540
      • d = 269

      (2)

      • c = 123
      • a ≡ 123^269 (mod 589)
        • 使用模幂运算进行计算
      • a = 302

      (3)

      • a^29 (mod 589)
        • 使用模幂运算进行计算

      最后,比较计算结果与密文123是否相等。如果相等,则证明(1)和(2)的计算是正确的。

      展开全部

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    五十六、请求与响应
    在springboot中实现WebSocket协议通信
    ​市场翘首以待本周三美国的通胀报告 美元指数先跌为敬
    acwing算法提高之图论--有向图的强连通分量
    leetocode 29. 两数相除-java
    【状语从句练习题】because vs so
    单元测试参数化
    Nodejs 第五十章(lua的基本使用)
    GitHub使用教程
    视频转音频怎么转?来试试这三个方法
  • 原文地址:https://ask.csdn.net/questions/8091262