所以我决定学习Sage编程,因为它可以处理非常大的数字,这对RSA加密/解密很有用。
(1)我是在举一个例子,但我不太确定他们是如何在ZZ()函数中得到100的。
(2)另一个问题是,有没有一种方法可以使用sage函数从整数转换为纯文本?
sage: m = "HELLOWORLD"
sage: m = map(ord, m); m
[72, 69, 76, 76, 79, 87, 79, 82, 76, 68]
sage: m = ZZ(list(reversed(m)), 100) ; m <------ this line
72697676798779827668
sage: m = 72697676798779827668
sage: c = 630913632577520058415521090
sage: d = 4460824882019967172592779313
sage: n = 4951760154835678088235319297
sage: power_mod(c, d, n)
72697676798779827668 <--- how do i convert this number back to plain text
sage: power_mod(c, d, n) == m
True发布于 2012-10-03 20:46:21
100告诉你列表中的每个元素要乘以幂的多少。可以把它想象成“基数100”。
sage: ZZ([1,2,3],100)
30201
sage: ZZ([1,2,3],2)
17
sage: ZZ([1,2,3],10) # 1*10^0+2*10^1+3*10^2
321从ord开始,This question有无数种倒退的方法。然后我们使用chr。
sage: a = 72697676798779827668
sage: ''.join([chr(int(str(a)[i:i+2])) for i in range(0, len(str(a)), 2)])
'HELLOWORLD'我同意这在可读性上并不理想。实际上,Sage在其crypto module中有一些其他内置的方法来在教学基础上进行加密。它也有一些用于字母表的内置内容。(我假设这不是您当前正在创建的RSA的工业强度版本。)
https://stackoverflow.com/questions/12702837
复制相似问题