小编Mic*_*Rad的帖子

我的RSA算法仅适用于非常短的单词

我的RSA算法适用于像"cat"这样的3个字母的单词,但是一旦单词变长,我会收到一条错误消息:异常:decipher2.hs:(37,1) - (62,19):非详尽的模式函数numToLet

我的程序按照以下步骤工作

用于加密

  • 将一串字母转换为一串数字,其中每个字母都分配给一个特定的数字.
  • 将数字串组合成一个更大的数字.
  • 使用适当的p和q值,计算n并选择一个合适的数字e,它是n的共同素数(因为这是一个内部过程,保持p和q的秘密是不重要的,但可以完成)
  • 执行RSA算法以生成"密码"

用于解密

  • 使用p和q计算总数φ(n)(其中φ(n)=(p-1)*(q-1))
  • 将Euclidean算法写入代码以找出两个数的最大公约数.
  • 将后置替换部分写入代码,使其可交换地形成扩展欧几里得算法.
  • 计算私钥.
  • 包括存储私钥的某种选项,以便每次都不需要执行此功能(为了提高速度).
  • 应该执行RSA加密的解密算法.
  • 结果应该被分成一串数字(与编码过程的第2阶段中它的组合方式相反).
  • 应将数字串转换为字母串(使用加密过程中使用的相同值).

我选择不包括计算关键部分,因为它是一个单独的程序,必须是正确的(因为短字可以被破译).我尝试使用较小的p和q值,但这也不起作用,是否有人知道为什么较长的单词不起作用(即使对于较小的素数)和/或我如何解决它?

我的加密代码是:

import Data.List
letToNum c'' = (let (Just n) = elemIndex c'' ['a'..'z'] in n) + 10

combine = foldl addDigit 0
    where addDigit num i' = (10 ^ (floor $ log (fromIntegral i') / log 10 + 1))*num + i'

firstTwo xs = toInteger (combine (map letToNum xs))

p' = 2^2048 - 1942289
q' = 2^2048 - 2^1056 + 2^736 …
Run Code Online (Sandbox Code Playgroud)

encryption algorithm haskell

4
推荐指数
1
解决办法
377
查看次数

标签 统计

algorithm ×1

encryption ×1

haskell ×1