2019年9月9日月曜日

学習環境

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


  1. 数字化。

    3218

    暗号化。

    m o d 2279 321 8 2 2027 321 8 4 1971 321 8 8 1425 321 8 16 36 321 8 32 1296 321 8 64 2272 321 8 128 49 321 8 256 122 321 8 512 1210 321 8 1024 982 321 8 1241 321 8 1024 + 128 + 64 + 16 + 8 + 1 982 · 49 · 2272 · 36 · 1425 · 3218 48118 · 81792 · 1425 · 939 259 · 2027 · 1338075 524993 · 302 823 · 302 248545 135

    よって、 暗号は 135。

    秘密鍵は

    1241 , 2279

    復号化。

    m o d 2279 13 5 557 X 321 8 2184 1 13 5 557 321 8 1241 557 321 8 691237 321 8 2184 · 316 + 1093 321 8 2184 316 · 321 8 1093 321 8 1093 321 8 1024 + 64 + 4 + 1 982 · 2272 · 1971 · 3218 2231104 · 1971 · 939 2242 · 1850769 2242 · 221 495482 939 3218

コード

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 コメント:

コメントを投稿