Help us understand the problem. What is going on with this article?

テキストの暗号化について(AES暗号化)

初投稿です!

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)

最後に

最初に参考のコードを見たときは、複雑だな〜分かるかな?と思ったけど、案外単純なロジックです。キーとベクトルが単純に直書きしてるだけなので、この二つを暗号化ごとに変えないと見破られちゃな。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away