我试图在C#中实现rsa -algo 用于学习目的
我遇到的问题是我随机创建的一些密钥不起作用。
一些细节:
我已经使用 BigInteger 类型来防止溢出异常等。
我检查了数学依赖性(p 和 n 作为 Prims,e < !(N) 和相对 Prime 和 e > 1)
- 扩展的欧几里得算法工作正常,我用一些在线计算器进行了反查(http://johannes-bauer.com/compsci/eea/index.php?zahl1=469&zahl2=2280&step=9999&detailliert=1&stepbystep=1)
- 我的加密和解密程序运行良好,因为它们有时会溢出正确的值。那么使用的钥匙一定是错的吧?!
我捕获了一些不起作用的键:
Prime numbers: p = 743 q = 37
Public key: e = 6371 N = 27491
Private Key: d = 524 >(N) = 26712
Prime numbers: p = 859 q = 47
Public key: e = 2239 N = 40373
Private Key: d = 647 >(N) = 39468
Prime numbers: p = 823 q = 29
Public key: e = 9173 N = 23867
Private Key: d = 1538 >(N) = 23016
Prime numbers: p = 719 q = 31
Public key: e = 1759 N = 22289
Private Key: d = 851 >(N) = 21540
Prime numbers: p = 149 q = 47
Public key: e = 1317 N = 7003
Private Key: d = 502 >(N) = 6808
Prime numbers: p = 859 q = 37
Public key: e = 9859 N = 31783
Private Key: d = 2790 >(N) = 30888
有没有我错过的依赖?或者它可能是我的代码中的东西,或者可能是 C# 中的东西?
更新:
这是扩展 Euclid 的代码,它不是我的( http://amir-shenodua.blogspot.de/2012/06/extended-gcd-algorithm-extended.html )
这是我计算 Prims 的函数( http://pastebin.com/79Pvsxe8 ) 我将测试用例的随机数限制为 100,并且我知道使用 C# 随机类是一种安全威胁。
这些是我的 RSA 函数(http://pastebin.com/2GxS9EDK)