2014-10-01 85 views
1

好吧,我试图在Haskell中创建一个基本的RSA函数。它不需要字符串,只有数字。我现在遇到的麻烦是关键的生成器功能。以下是我迄今为止:Haskell RSA加密密钥生成器问题

chooseKeys :: Integer -> Integer -> (Integer,Integer) 
chooseKeys n e = 
    let 
     n' = (n-1)*(e-1) 
     m = (n*e) 
     e' = find (e `mod` n') -- e' needs to be such that the gcd of (e',n') = 1 
     d' = minv n' e' 
     find x 
     | g == 1 = x 
     | otherwise = find ((x+1) `mod` n') 
     where (g,_,_) = extGCD x n' 
    in (e', d') 

我知道我的“MINV”功能是好的,但我不认为这是吐涎出正确的值。该程序运行,但它不会给我写回答。有人能给予一些非常感谢的帮助吗?谢谢!

编辑:我修改了一下代码。希望现在更清楚一点。

+1

你可以给一些样本输入与预期的结果?或者,更好的办法是链接到你正在编写的函数的规范? – 2014-10-01 00:42:04

+0

你有''e'= e'mod' n'''',其中'gcd e'n'== 1'。你为什么不写一个像[this]这样的函数(https://gist.github.com/46745c5b6aa9d1a3ba29),如果它返回'Nothing',那么你知道你的问题是用'e'和'n'',否则你知道这很好,你可以在你的代码中尝试其他计算,看看它们是否导致问题。 – bheklilr 2014-10-01 02:03:18

+1

这一切似乎都是错误的。如果'n'和'e'是素数,那么'n''和'e == mod n''的GCD将是1(对于非平凡的'n'),所以'e'== e'。你不想公开其中一个素数作为关键。典型的做法是,'e''被选择为少数的素数 - 例如3,5或11.它的大小无关紧要,因为它是公开的。 – 2014-10-01 13:46:57

回答

1

如果我正确记得我的RSA,你想要d' * e' `mod` n' == 1

鉴于此,并假设这是相同的minvyour previous question,我认为你有它的观点相反。