やりたいこと
pythonでAES(共通鍵方式)でパスワードの暗号化・複号化したい
前提
・Pythonインストール済み
・cryptographyライブラリインストール済み
やり方
さっそく調べた内容をソースコードで作りました
cryptography.fernetはAES128でCBCモードで暗号化複号化しているらしいです。
暗号化複号化するときは、パラメータはbyte形式じゃないとだめなので、strをbyteへ変換しました・
qiita.rb
from cryptography.fernet import Fernet
# 鍵作成
def create_key():
key = Fernet.generate_key()
print(key)
print(key.decode('utf-8'))
return key.decode('utf-8')
# 暗号化する
def encrypt(key: str, data: str):
fernet = Fernet(bytes(key, 'utf-8'))
encrypted_pass = fernet.encrypt(bytes(data, 'utf-8'))
print(encrypted_pass)
print(encrypted_pass.decode('utf-8'))
return encrypted_pass.decode('utf-8')
# 復号する
def decrypt(key: str, data: str):
fernet = Fernet(bytes(key, 'utf-8'))
decrypted_pass = fernet.decrypt(bytes(data, 'utf-8'))
print(decrypted_pass)
print(decrypted_pass.decode('utf-8'))
return decrypted_pass.decode('utf-8')
password = 'password'
print(password)
key = create_key()
encrypted_pass = encrypt_password(key, password)
decrypt_password(key, encrypted_pass)
結果をprintすると、このようになります。
上から下までは、パスの初期値、鍵(バイト)、鍵(str)、暗号化したパス(バイト)、暗号化したパス(str)、複号化したパス(バイト)、複号化したパス(str)
ちなみにですが、鍵は毎回新しいものを作る必要がなくて、以前作ってたものを覚えて流用するもの大丈夫とのことでした。
やり方
暗号化をかけたら、値が結構長くなりましたね。。。
参考サイト