【问题标题】:Julia power operator ^ returns different value than python pow()Julia 幂运算符 ^ 返回与 python pow() 不同的值
【发布时间】:2021-04-21 01:53:30
【问题描述】:

我做了一个 rsa 加密演示来学习 julia,但遇到了问题。 当我检查 python 代码时,这应该不是溢出问题,并且所有值都符合 rsa 标准。 欢迎任何指点。 julia 是一门很棒的语言,我想弄清楚这一点。

检查这些图像以了解我的问题:

【问题讨论】:

  • 请不要发布代码图片,而是将代码发布为文本,以便我们可以复制粘贴。另外,请简化您的示例。我们不需要知道rsa 部分。只需说类似 "Julia: 123^456=..., Python pow(123, 456)=..." 之类的话。你可以edit你的答案。

标签: julia


【解决方案1】:

您需要BigInt(message)^used_e 和类似的。您看到的问题是转换为BigInt 之前的整数溢出。请注意,powermod(BigInt(message), used_e, used_N) 会快得多,因为它会使所有中间数字更小。

【讨论】:

  • 谢谢,您的代码有效!我不知道这个功能...粘贴代码确实很有用xD我会记住这一点,以备再次需要帮助时使用
【解决方案2】:

请注意,在 Julia 中,x % yrem(x, y) 函数“来自欧几里得除法,返回与 x 相同符号的值”的同义词,而对于 RSA 实现,您需要 mod 函数相反,结果与y 具有相同的符号。 (但你真的想要powermod 而不是BigInt 来获得性能。)

【讨论】:

  • 由于 RSA 的所有参数都是正数,remmod 是相同的。
  • @OscarSmith 这对于基本的 RSA 公式是正确的,但是使用非对称加密的用户可能很快就会转向涉及减法的其他算法(例如 DSA),然后使用正确的 mod 运算符变得很重要,所以我认为值得一提。我很欣赏原始问题中的负数是Int 溢出的结果,即用户转换为BigInt 为时已晚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 2016-02-01
  • 2017-06-06
  • 1970-01-01
  • 2017-01-14
相关资源
最近更新 更多