LoginSignup
1
8

More than 3 years have passed since last update.

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

Posted at

初投稿です!

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)

最後に

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

1
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
8