Pythonで自作のPWマネージャーを作りたいのですがアドバイスお願いいたします。
ローカルでの使用でも暗号化をしたほうが良いと言われたのですが理由が知りたいです。
なぜローカルなのに暗号化が必要なのか知りたいです。私の書いたコードですとどのような脆弱性がありますか?
またどのように実装すれば良いのでしょうか?下記のコードをは辞書にPWを格納してターミナルで引数をとってそれに対応しているキーを返すことで管理しています。
初心者ですので、正直どのようにどこで暗号化すれば良いのかイメージがつきません。
以下がコードになります。
python
1 2#! python3 3# pw.py - Password Management Program (Vulnerable ) 4 5PASSWORDS = {'email':'F7minlifiliofn20493UFprfeH39', 'blog':'VmALH43nOUffsd49530u','luggage':'12345'} 6 7import sys 8import pyperclip 9 10if len(sys.argv) < 2: 11 print('How to use "pw.py" file on mac terminal. please type pyhton3 pw.py "account name" in your terminal.') 12 print('To copy PW to clipboard') 13 sys.exit() 14 15account = sys.argv[1] # The first command line argument is the account name. [0] is the file name which is "pw.py" 16account = account.lower() 17 18if account in PASSWORDS: 19 pyperclip.copy(PASSWORDS[account]) # 20 print("The password of " + account + " is copied on clipboard") 21else: 22 print('account "' + account + '" dosen\'s exist') 23
例えばこのような簡単なシーザー暗号化のコードを用意したのですが、もしこのような暗号化のコードをどのようにして上記のPWマネージャーのコードと組み合わせれば良いのでしょうか?
そもそも使えない場合は以下のコードは無視してください。
Python
1# シーザー暗号 2# https://www.nostarch.com/crackingcodes/ (BSD Licensed) 3 4import pyperclip 5 6# 暗号化、復号化する文字列 7message = "This is me message" 8 9#暗号化、復号化の鍵 10key = 21 11 12#プログラムが暗号化するか復号化するか 13mode = "encrypt" # Choose either encrypt or decrypt 14 15# 暗号化できるシンボルの全候補 16SYMBOLS = "ABCDEFGHIJKLMNOPQRSTYVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !?." 17 18#メッセージの暗号化、復号化の結果を格納する 19translated = "" 20 21for symbol in message: 22 #注意:文字列SYMBOLに含まれるシンボルのみを暗号化、復号化する 23 if symbol in SYMBOLS: 24 symbolIndex = SYMBOLS.find(symbol) 25 26 #暗号化、復号化する 27 if mode == "encrypt": 28 translatedIndex = symbolIndex + key 29 elif mode == "decrypt": 30 translatedIndex = symbolIndex - key 31 32 #必要に応じてラップアラウンド処理をする 33 if translatedIndex >= len(SYMBOLS): 34 translatedIndex = translatedIndex - len(SYMBOLS) 35 elif translatedIndex < 0: 36 translatedIndex = translatedIndex + len(SYMBOLS) 37 38 translated = translated + SYMBOLS[translatedIndex] 39 else: 40 #暗号化、復号化せずにシンボルを追加する 41 translated = translated + symbol 42 43#変換後の文字列を出力する 44print(translated) 45pyperclip.copy(translated) 46
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。