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”功能是好的,但我不认为这是吐涎出正确的值。该程序运行,但它不会给我写回答。有人能给予一些非常感谢的帮助吗?谢谢!
编辑:我修改了一下代码。希望现在更清楚一点。
你可以给一些样本输入与预期的结果?或者,更好的办法是链接到你正在编写的函数的规范? – 2014-10-01 00:42:04
你有''e'= e'mod' n'''',其中'gcd e'n'== 1'。你为什么不写一个像[this]这样的函数(https://gist.github.com/46745c5b6aa9d1a3ba29),如果它返回'Nothing',那么你知道你的问题是用'e'和'n'',否则你知道这很好,你可以在你的代码中尝试其他计算,看看它们是否导致问题。 – bheklilr 2014-10-01 02:03:18
这一切似乎都是错误的。如果'n'和'e'是素数,那么'n''和'e == mod n''的GCD将是1(对于非平凡的'n'),所以'e'== e'。你不想公开其中一个素数作为关键。典型的做法是,'e''被选择为少数的素数 - 例如3,5或11.它的大小无关紧要,因为它是公开的。 – 2014-10-01 13:46:57