0

我想为一个大学项目实现一个 RSA 密码系统算法,我正在尝试决定使用哪种编程语言。我对C非常熟悉,所以这将是一个方便的选择。然而,该算法必须处理非常大的数字(它将包括一个 Primality 子例程),而且我听说使用 Python 会产生更好的实现。那正确吗?

先感谢您。

4

3 回答 3

2

当然,您可以使用任何语言来实现 RSA,甚至是 Assembler。问题可能不是关于“更好”的实现,而是关于几周后查看结果代码时更容易掌握的问题。

让我们回顾一下 RSA 实现所需的内容:

  • 大整数支持
  • 模幂
  • 模逆
  • 密钥生成的素性测试

您选择的语言对这些的支持越多,结果就越清晰和易于理解。像 C(++) 这样的低级语言不会对大整数提供本机支持,但是像gmp这样的库会为您提供所需的一切。Java 有 BigInteger 类。

但是,结果可能不会像使用具有内置大整数支持的语言(例如 Python、Ruby 或 Haskell)的实现那样容易理解。生成的代码将非常类似于所使用算法的教科书描述。不利的一面是,它们往往比高度优化的 gmp 代码慢。

但由于此时性能可能不是您所追求的,我建议使用更高级的语言。您不必处理低级维护,可以专注于手头的任务,选择您最喜欢或有经验的那个。如果您想借鉴您对 C 的熟悉程度,没问题,使用任意 -诸如 gmp 之类的精密库,您也可以开始使用。

对于默认情况下可能没有内置到语言中的缺失部分,您可以使用以下内容作为参考:

尽管您可能已经知道这一点,但为了完整起见,请让我警告您,这种所谓的“教科书 RSA”实现在生产中使用并不安全 - 很多事情还没有解决。有RSA 致盲可以防止侧信道攻击,为了使 RSA 作为一种加密方案是安全的,你还需要实现某种形式的填充,为你的密钥等使用加密安全的随机生成器是至关重要的。

于 2012-06-03T18:02:26.183 回答
1

我不知道 Python 是否会产生“更好”的实现,因为更好在这里是相当主观的。您可以找到两者的数字库,让您轻松处理大量数字。Python 具有 numpy 库的优势(imo),该库非常易于阅读和使用,并且通常更具人类可读性,这通常会导致更容易调试。

于 2012-06-03T14:35:52.693 回答
0

使用脚本语言或任何比 C 更高级的语言(例如 C# 或 Java)很可能会更容易,因为您不必处理内存管理和其他与您的项目无关的任务。

于 2012-06-03T14:35:17.277 回答