所以我决定学习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
答案 0 :(得分:2)
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
This question有很多方法可以从ord
倒退。然后我们使用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的工业级版本。)