RSA加密/解密不返回原始邮件

2024-09-27 00:14:31 发布

您现在位置:Python中文网/ 问答频道 /正文

初学者,尝试一些RSA加密。我编写了一个python代码,它大多数时候都返回正确的消息,但有时加密和解密不会返回原始消息。在

我认为这是我代码中的一些错误,但是一些在线资源也返回了错误:

http://extranet.cryptomathic.com/rsacalc/index

https://www.cs.drexel.edu/~jpopyack/IntroCS/HW/RSAWorksheet.html

所选参数包括:

p=11

q=269

n=2959个

e=13

直径=1237

消息=13355

密码文本=1079

解密=1519

我错过了RSA的某种限制吗?文本参数的最小大小?在


Tags: 代码https文本comhttp消息参数index
1条回答
网友
1楼 · 发布于 2024-09-27 00:14:31

你的模数(n)是2959。这意味着你可以用这个系统加密的最大数字是2958。在

您试图加密数字13355,它太大了。得到的结果等于13355 mod 2959,即1519。在

但为什么呢?

用于实现RSA加密的两个基本公式如下:

  1. c=me(modn),以及
  2. m=cd(modn

其中n是模,m是明文,c是加密密文,e是公开加密指数,d是私有解密指数。由于所有算术都是模n执行的,因此等式1中的c和等式2中的m的值必须小于n。在

如果m大于n怎么办?好吧,在这种情况下,我们可以使代换m0+kn,其中k是一个整数值。由此我们得到:

c=me(modn)=(m0+kne(modn

如果扩展项(m0+kne,您将得到如下表达式:

e0+kne=(m00e00000m0kn eem>)+em1m0e-2kn2a2m)0e-3kn3+。。。+(kne

其中系数a0a1等为binomial coefficients。这看起来很复杂,但由于每个项中带ann都等于零(modn),我们只剩下me(modn)“”(m0e(modn)。换言之,试图加密大于或等于n的值的结果与加密该数模的结果相同。所以当你以为你在加密数字13355,实际上你在加密13355 mod 2959。在

通常这不是问题;RSA通常用于加密对称密钥,以便与AES等密码一起使用,所以2048位就足够了。如果您真的要以某种方式加密一个值≥n,那么可以使用多个消息。例如,在基数2959中,13355有两个“数字”—第一个是4,第二个是1519。这些数字可以在接收端重新组合(4*2959+1519=13355)。在

相关问题 更多 >

    热门问题