我想为一个大学项目实现一个 RSA 密码系统算法,我正在尝试决定使用哪种编程语言。我对C非常熟悉,所以这将是一个方便的选择。然而,该算法必须处理非常大的数字(它将包括一个 Primality 子例程),而且我听说使用 Python 会产生更好的实现。那正确吗?
先感谢您。
我想为一个大学项目实现一个 RSA 密码系统算法,我正在尝试决定使用哪种编程语言。我对C非常熟悉,所以这将是一个方便的选择。然而,该算法必须处理非常大的数字(它将包括一个 Primality 子例程),而且我听说使用 Python 会产生更好的实现。那正确吗?
先感谢您。
当然,您可以使用任何语言来实现 RSA,甚至是 Assembler。问题可能不是关于“更好”的实现,而是关于几周后查看结果代码时更容易掌握的问题。
让我们回顾一下 RSA 实现所需的内容:
您选择的语言对这些的支持越多,结果就越清晰和易于理解。像 C(++) 这样的低级语言不会对大整数提供本机支持,但是像gmp这样的库会为您提供所需的一切。Java 有 BigInteger 类。
但是,结果可能不会像使用具有内置大整数支持的语言(例如 Python、Ruby 或 Haskell)的实现那样容易理解。生成的代码将非常类似于所使用算法的教科书描述。不利的一面是,它们往往比高度优化的 gmp 代码慢。
但由于此时性能可能不是您所追求的,我建议使用更高级的语言。您不必处理低级维护,可以专注于手头的任务,选择您最喜欢或有经验的那个。如果您想借鉴您对 C 的熟悉程度,没问题,使用任意 -诸如 gmp 之类的精密库,您也可以开始使用。
对于默认情况下可能没有内置到语言中的缺失部分,您可以使用以下内容作为参考:
pow
带有3 个参数),对于其他语言,您可以尝试“平方和乘法”方法尽管您可能已经知道这一点,但为了完整起见,请让我警告您,这种所谓的“教科书 RSA”实现在生产中使用并不安全 - 很多事情还没有解决。有RSA 致盲可以防止侧信道攻击,为了使 RSA 作为一种加密方案是安全的,你还需要实现某种形式的填充,为你的密钥等使用加密安全的随机生成器是至关重要的。
我不知道 Python 是否会产生“更好”的实现,因为更好在这里是相当主观的。您可以找到两者的数字库,让您轻松处理大量数字。Python 具有 numpy 库的优势(imo),该库非常易于阅读和使用,并且通常更具人类可读性,这通常会导致更容易调试。
使用脚本语言或任何比 C 更高级的语言(例如 C# 或 Java)很可能会更容易,因为您不必处理内存管理和其他与您的项目无关的任务。