python

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

how to encrypt and decrypt of AES in python
プログラム女子
プログラム女子

pythonの処理で、パスワードなどを扱いたいんだけど、パスワードをそのまま扱うのってセキュリティ上どうなのかな...

その場合は、パスワードを暗号化して処理する方法もあるよ。ここでは、AESを使った暗号化と、暗号化をもとに戻す復号化の方法について説明するね。

Tommy
Tommy

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

summary of encryption and decryption in AES

この記事では、pythonを使った暗号化と復号化の方法を説明します。

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

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

environment of encryption and decryption in AES

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

【python】バージョン確認の方法【→プログラミング初心者向け】

また、レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。

もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。

レンタルサーバでプログラミングする方法【→レンタルサーバでできる!】

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プログラムの学習のですから、実務に生かせないと学習している効果も実感することができません。

プログラマーにとって、

  • 「人の役に立った時」
  • 「人に喜んでもらった時」

にそこ、プログラムをやっていてよかったと喜びを感じられるものです。

また、プログラムの効果を発揮できる身近な場所は「普段の業務」です。つまり、学習したプログラムで効率化できる可能性の一番の高い場所です。 そういう意味で、「普段の業務」を効率化しないと、もったいないです。

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

【python】業務効率化の方法8選【→周りを出し抜く自動化】

-python
-, , ,

Copyright© Tommy's blog , 2020 All Rights Reserved Powered by AFFINGER5.