初投稿です!
Pythonを勉強している中で、パスワードの暗号化をやりたい!と思い調べてみました。
暗号化のパッケージとしてはpycryptoが有名のようで、Anacondaでもインストール可能だったため、今回はpycryptoを使って、文字列のAES暗号化についてまとめてみます。
参考文献
AES暗号化を学ぶ上で参考にしたリンクは以下の通りです。
https://blanktar.jp/blog/2013/04/python-crypto-aes.html
https://ujise.com/2019/08/23/post-1869/
https://ja.wikipedia.org/wiki/Advanced_Encryption_Standard
実装
では、実際のコードです。下記のコードはパスワードのテキスト文を渡し、暗号化&複合化するものです。暗号化データはpassword_data_fileとして保存されます。
pycrypto.py
from Crypto.Cipher import AES
# キー設定関数
def create_key(KeyWord):
key_size = 32
KeySizeFill = KeyWord.zfill(key_size)
Key = KeySizeFill[:key_size].encode('utf-8')
return Key
# パスワードの暗号化関数
def encryptOn(PassWord, KeyWord):
iv = "1234567890123456" # 初期化ベクトル設定
Key = create_key(KeyWord) # キー設定
obj = AES.new(Key, AES.MODE_CFB, iv)
ret_bytes = obj.encrypt(IPassWord) #パスワードの暗号化
# 暗号化ファイルの出力
OFileName = "password_data_file"
with open(OFileName, mode='wb') as f:
f.write(ret_bytes)
# パスワードの複合化関数
def encryptOff(KeyWord):
# パスワードファイルの読み取り
PassFile = "password_data_file"
with open(PassFile, 'rb') as f:
EnPass = f.read() # 暗号化されたパスワード
iv = "1234567890123456" # 初期化ベクトル設定
key = create_key(KeyWord) # キー設定
obj = AES.new(key, AES.MODE_CFB, iv)
OPassword = obj.decrypt(Pass).decode('utf-8') #パスワードの複合化
return OPassword
if __name__ == '__main__':
IPassWord = "modelPass"
KeyWord = "login_file"
# 暗号化関数呼び出し
encryptOn(IPassWord, KeyWord)
# 複合化関数呼び出し
OPassWord = encryptOff(KeyWord)
print(OPassWord)
最後に
最初に参考のコードを見たときは、複雑だな〜分かるかな?と思ったけど、案外単純なロジックです。キーとベクトルが単純に直書きしてるだけなので、この二つを暗号化ごとに変えないと見破られちゃな。