python

【python】AES形式で暗号化と復号化する【→セキュリティ強化】

9月 11, 2019

how to encrypt and decrypt of AES in python
プログラム女子
pythonの処理で、パスワードなどを扱いたいんだけど、パスワードをそのまま扱うのってセキュリティ上どうなのかな...
その場合は、パスワードを暗号化して処理する方法もあるよ。ここでは、AESを使った暗号化と、暗号化をもとに戻す復号化の方法について説明するね。
Tommy

この記事で分かること

  • AES形式で変数を暗号化する方法が分かる
  • AES形式で変数を復号化する方法が分かる

pythonでAES形式で暗号化と復号化する概要

summary of encryption and decryption in AES

この記事では、pythonを使った暗号化と復号化の方法を説明します。暗号化とは、あるデータの内容を他人にわからないようにする処理のことです。対して、復号化とは、暗号化されたデータを元に(平文に)戻すことを言います。

これによって、パスワードなどAESを使った暗号化を行い保存しておき、処理内でパスワードを使用する際には復号化してパスワードをしようするといった使い方ができるようになります。

pythonでAES形式で暗号化と復号化する前提の環境

environment of encryption and decryption in AES

AES形式で暗号化と復号化する前提の環境は、下の記事で説明している私の環境と同じ環境で確認しています。

オススメ
how to check version in python
【python】バージョン確認の方法【→プログラミング初心者向け】

続きを見る

また、レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。

オススメ
how to programming on rental server
レンタルサーバでプログラミングする方法【→ブログのサーバでできる!】

続きを見る

pythonでAES形式で暗号化と復号化するサンプルプログラム

sample program of encryption and decryption in AES

このサンプルプログラムでは、暗号化と復号化の手順を、それぞれの関数の定義、実行することによって説明します。

ライブラリをインポートする

まず初めに、各種ライブラリをインポートします。AESを用いた暗号化・復号化に必要なCryptoライブラリを各種モジュールをインポートしています。

from Crypto.Cipher import AES
from Crypto.Hash import SHA256
from Crypto import Random

aesを作成する

次に、暗号化(AES)オブジェクトを作成する手順を説明します。AES.new()に引数としては、

  • key(暗号化鍵)
  • AES.MODE_CFB(暗号化アルゴリズム)
  • iv(初期化ベクタ)

の3つのパラメータを入力しています。暗号化鍵には、パスワードをSHA256でハッシュした値(256bit)を鍵として利用しています。また、アルゴリズムを指定する引数としてAES.MODE_CFBを指定しています。初期化ベクタは、乱数生成におけるシード値のようなものです。

def create_aes(password, iv):
	sha = SHA256.new()
	sha.update(password.encode())
	key = sha.digest()
	return AES.new(key, AES.MODE_CFB, iv)

暗号化する

次には、暗号化する関数を定義し、暗号化の手順を説明します。Random.new()によって生成された初期化ベクタivを使って、AESオブジェクトのencrypt()関数を呼び出すことによって暗号化を行います。

def encrypt(decrypted_data, password):
	iv = Random.new().read(AES.block_size)
	return iv + create_aes(password, iv).encrypt(decrypted_data)

復号化する

ここでは、復号化する関数を定義し、復号化の手順を説明します。入力されたencrypted_dataから初期化ベクタivと本文のデータに分離します。最後に、decrypt()関数で復号化を行います。

def decrypt(encrypted_data, password):
	iv, cipher = encrypted_data[:AES.block_size], encrypted_data[AES.block_size:]
	return create_aes(password, iv).decrypt(cipher)

定義した関数の実行

最後に、例として暗号化鍵の元になるパスワードpasswordと、暗号化対象の文字列s_stringsを題材として、上記で定義した3つの関数の呼び出しを行い、暗号化と復号化の例を記載しています。

if __name__ == '__main__':

	password = "tommy1"
	s_strings = "secret tommy's sentence."

	enc = encrypt(s_strings, password)
	print(enc)

	dec = decrypt(enc, password)
	print(dec)

pythonで業務効率化するその他の方法

other way of business efficiency by python

この記事では、pythonを使った暗号化と復号化の方法を説明しました。暗号化と復号化以外にも、pythonには、業務効率化できる手段がたくさんあります。

下記の記事に、普段オフィス環境で使われるツールを使って業務効率化できる方法をまとめていますので、ぜひ合わせて読んで取り組んでみてください。

オススメ
8 ways for business efficiency by python
【python】業務効率化の方法8選【→周りを出し抜く自動化】

続きを見る

-python
-

© 2021 Tommy's blog Powered by AFFINGER5