0

そこで、RSA 暗号化/復号化に役立つ非常に大きな数を処理できる Sage プログラミングを学ぶことにしました。

(1) 例に従っていましたが、ZZ() 関数内でどのように 100 を取得したのかよくわかりません。

(2) また別の質問ですが、セージ関数を使用して整数からプレーン テキストに変換する方法はありますか?

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
4

1 に答える 1

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

この質問には、からさかのぼる無数の方法があります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 には、暗号化モジュールで教育的に暗号化を行うための組み込みの方法が他にもいくつかあります。これには、アルファベット用の組み込みのものもあります。(これは、現在作成している RSA の業務用バージョンではないと思います。)

于 2012-10-03T12:46:21.227 に答える