Leo*_*ach 1 python encryption cryptography rsa
初学者,尝试一些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
d = 1237
消息= 13355
crypt text = 1079
解密= 1519
我错过了对RSA的某种限制吗?文本的一些最小参数大小?
您的模数(n)是2959.这意味着您可以使用此系统加密的最大数字是2958.
您正在尝试加密数字13355,这个数字太大了.你得到的结果等于13355 mod 2959,即1519.
用于实现RSA加密的两个基本公式如下:
其中n是模数,m是明文,c是加密密文,e是公共加密指数,d是私有解密指数.由于所有算术都是以模n为单位进行的,因此公式中的c值为1 .1和m在Eq.2必须小于n.
如果m大于n怎么办?那么,在这种情况下,我们可以使替换m = m 0 + kn,其中k是某个整数值.由此我们得到:
c = m e(mod n)=(m 0 + kn)e(mod n)
如果你扩展术语(m 0 + kn)e,你最终会得到如下表达式:
(m 0 + kn)e =(m 0)e + a 0(m 0)e -1(kn)+ a 1(m 0)e -2(kn)2 + a 2(m 0)e -3(kn)3 + ... +(kn)e
其中系数a 0,a 1等是二项式系数.这看起来很复杂,但由于每个带有n的项等于零(mod n),我们留下m e(mod n)≡(m 0)e(mod n).换句话说,尝试加密大于或等于n的值的结果与加密该模数n的结果相同.因此,当您认为加密数字13355时,实际上您正在加密13355 mod 2959.
通常这不是问题; RSA通常用于加密对称密钥以与AES等密码一起使用,因此2048位就足够了.如果你真的必须以某种加密值≥ ñ,您可以使用多个消息.例如,在基数2959中,数字13355具有两个"数字" - 第一个是4,第二个是1519.这些数字可以在接收端重新组合(4*2959 + 1519 = 13355).
| 归档时间: |
|
| 查看次数: |
326 次 |
| 最近记录: |