学習環境
- Surface、Surface ペン(端末)
- Windows 10 Pro (OS)
- Nebo(Windows アプリ)
- iPad Pro 10.5 + Apple Pencil
- MyScript Nebo - MyScript(iPad アプリ(iOS))
- 参考書籍
中学数学からはじめる暗号入門 ~現代の暗号はどのようにして作られたのか~ (知りたい!サイエンス 141) (関根 章道(著)、技術評論社)の後編(現代の暗号)、第8章(最終問題)の最後の暗号を解いてみよう - Part 7 (RSA暗号)の解答を求めてみる。
数字化。
3218暗号化。
(mod2279)32182≡202732184≡197132188≡1425321816≡36321832≡1296321864≡22723218128≡493218256≡1223218512≡121032181024≡98232181241≡32181024+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)復号化。
(mod2279)135557≡X32182184≡1135557≡(32181241)557≡3218691237≡32182184·316+1093≡(32182184)316·32181093≡32181093≡32181024+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 コメント:
コメントを投稿