Haskell RSA 加密

Haskell RSA encryption

对于一项作业,我需要编写两个函数,一个用于 RSA 加密,一个用于解密。 这些函数以密钥对和模作为参数。

rsaencrypt :: (Integer, Integer) -> Integer -> Integer
rsaencrypt (e, m) x = x^e `mod` m

rsadecrypt :: (Integer, Integer) -> Integer -> Integer
rsadecrypt (d, m) x = x^d `mod` m

假设我们有模数为 91 的密钥对 (5, 29)。 如果我们想加密数字 75,我们会得到密文 17,如果我们解密 17,我们会得到 75。到目前为止一切都很好。 但是当我尝试一个不同的数字时,假设是 97。我们得到密文 41,如果我们解密 41,我们得到 6。 为什么我的函数只适用于某些数字?

查看rsadecrypt的定义:

rsadecrypt (d, m) x = x^d `mod` m

应该清楚的是,所有输出都将在 0m-1 之间(含)。由于解密肯定位于该范围内,因此您无法为该范围之外的任何消息创建恰好 round-trip.

的加密

...并且,为了连接最后两个点,97超出了091-1的范围,因此无法正确加密(对于这个定义“正确”)。