pythonでの復号その1

前回のつづきのような。

前回までの記事を踏まえて、一つのコードにまとめました。
暗号文と3つの鍵を入力すれば、復号した文を出力します。
プログラミングならば、例の動画の第2問までなら一瞬で答えが出せる。

code = int(input("暗号の数字列を入力するのだ>>>"))
key_p = int(input("一つ目の鍵「p」を入力するのだ>>>"))
key_q = int(input("二つ目の鍵「q」を入力するのだ>>>"))
key_e = int(input("三つ目の鍵「e」を入力するのだ>>>"))
#m(p-1)(q-1) ≡ -1 (mod e)
natural_num= 1
while True:
   amari = (key_p-1) * (key_q-1) * natural_num % key_e
   if amari == (key_e-1):
       m = natural_num
       print("m=",m)
       break
   natural_num += 1
#d = (m(p-1)(q-1)+1)/e
#「/」で割ると結果がfloatになるので、切り捨てになる「//」を使う
d = (m * (key_p-1) * (key_q-1)+1) // key_e
print("d=", d)
#c^d ≡ M(mod n)
n = key_p * key_q
factorial = 1
for p in range(1, d+1):
   factorial = factorial * code
answer = factorial % n
print("answer=", answer)

次は素因数分解に行きたいところ。
でも、これとは逆の暗号化の方が面白そう。

この記事が気に入ったらサポートをしてみませんか?