Loading [MathJax]/jax/output/HTML-CSS/jax.js

2019年9月9日月曜日

学習環境

中学数学からはじめる暗号入門 ~現代の暗号はどのようにして作られたのか~ (知りたい!サイエンス 141) (関根 章道(著)、技術評論社)の後編(現代の暗号)、第8章(最終問題)の最後の暗号を解いてみよう - Part 7 (RSA暗号)の解答を求めてみる。


  1. 数字化。

    3218

    暗号化。

    (mod2279)3218220273218419713218814253218163632183212963218642272321812849321825612232185121210321810249823218124132181024+128+64+16+8+1982·49·2272·36·1425·321848118·81792·1425·939259·2027·1338075524993·302823·302248545135

    よって、 暗号は 135。

    秘密鍵は

    (1241,2279)

    復号化。

    (mod2279)135557X321821841135557(32181241)557321869123732182184·316+1093(32182184)316·321810933218109332181024+64+4+1982·2272·1971·32182231104·1971·9392242·18507692242·2214954829393218

コード

Python 3

#!/usr/bin/env python3
from unittest import TestCase, main
from sympy import gcd


class MyTest(TestCase):
    def setUp(self):
        pass

    def tearDown(self):
        pass

    def test(self):
        num = 3218
        e, n = 1241, 2279
        d = 557
        encoded = num ** e % n
        decoded = encoded ** d % n + n
        self.assertEqual(encoded, 135)
        self.assertEqual(decoded, num)


if __name__ == '__main__':
    main()

入出力結果(Bash、cmd.exe(コマンドプロンプト)、Terminal、Jupyter(IPython))

$ ./sample2.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
$ 

0 コメント:

コメントを投稿