适用于RSA实施的语言

时间:2012-06-03 14:32:09

标签: python c cryptography rsa primality-test

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

提前谢谢。

3 个答案:

答案 0 :(得分:2)

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

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

  • 大整数支持
  • 模幂运算
  • modular inverse
  • 密钥生成的素性测试

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

但是,结果可能不像在具有内置大整数支持的语言中的实现那样容易理解,例如Python,Ruby或Haskell。生成的代码几乎就像使用的算法的教科书描述。在缺点方面,它们往往比例如高度优化的gmp代码慢。

但是,由于此时的表现可能与您不同,我建议使用更高级别的语言。您不必处理低级维护,可以专注于手头的任务,选择您最喜欢的或有经验的人。如果您想从熟悉的C中汲取,没有问题,请使用aribitrary-精确的库,如gmp,你也很高兴。

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

虽然您可能已经知道这一点,但为了完整起见,请允许我警告您,这就是所谓的“教科书RSA”实施,在生产中使用是不安全的 - 很多事情还没有得到解决。有RSA blinding来防止旁道攻击,因为RSA作为加密方案是安全的,您还需要实现某种形式的填充,对您的密钥等使用加密安全随机生成器至关重要。< / p>

答案 1 :(得分:1)

我不知道Python是否会导致“更好”的实现,因为这里更好主观。你可以找到两者的数值库,这将允许你轻松处理大数字。 Python具有非常容易阅读和使用的numpy库的优点(imo),并且通常更易于阅读,这通常会使调试更容易。

答案 2 :(得分:0)

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