Passwordの暗号化&復号化 - lucen2k/python GitHub Wiki
Install
$ pip install pycryptodome
Source
import base64, re
from Crypto.Cipher import AES
from Crypto import Random
class AESCipher:
def __init__(self):
SECRET_KEY = 'ImWU4MDCdUefjSqecjs3sP9h/tKxqHx0efNm12ADsOd8MVx1PMqVajQQPCNsdink'
self.key = SECRET_KEY[:16]
self.blk_sz = 32
def encrypt(self, raw):
if raw is None or len(raw) == 0:
raise NameError("No value given to encrypt")
raw = raw + '\0' * (self.blk_sz - len(raw) % self.blk_sz)
raw = raw.encode('utf-8')
iv = Random.new().read(AES.block_size)
cipher = AES.new(self.key.encode('utf-8'), AES.MODE_CBC, iv)
return base64.b64encode(iv + cipher.encrypt(raw)).decode('utf-8')
def decrypt(self, enc):
if enc is None or len(enc) == 0:
raise NameError("No value given to decrypt")
enc = base64.b64decode(enc)
iv = enc[:16]
cipher = AES.new(self.key.encode('utf-8'), AES.MODE_CBC, iv )
return re.sub(b'\x00*$', b'', cipher.decrypt(enc[16:])).decode('utf-8')
# パスワード
password = 'password111'
aes = AESCipher()
# 暗号化
encryp_msg = aes.encrypt()
print(encryp_msg)
# 復号化
msg = aes.decrypt( encryp_msg )
print(msg)
Source修正
import base64, re
from Cryptodome.Cipher import AES
from Cryptodome import Random
class AESCipher:
def __init__(self, SECRET_KEY):
self.key = SECRET_KEY[:16]
self.blk_sz = 32
def encrypt(self, raw):
if raw is None or len(raw) == 0:
raise NameError("No value given to encrypt")
raw = raw + '\0' * (self.blk_sz - len(raw) % self.blk_sz)
raw = raw.encode('utf-8')
iv = Random.new().read(AES.block_size)
cipher = AES.new(self.key.encode('utf-8'), AES.MODE_CBC, iv)
return base64.b64encode(iv + cipher.encrypt(raw)).decode('utf-8')
def decrypt(self, enc):
if enc is None or len(enc) == 0:
raise NameError("No value given to decrypt")
enc = base64.b64decode(enc)
iv = enc[:16]
cipher = AES.new(self.key.encode('utf-8'), AES.MODE_CBC, iv )
return re.sub(b'\x00*$', b'', cipher.decrypt(enc[16:])).decode('utf-8')
"""
# パスワード
password = 'password111'
aes = AESCipher('ImWU4MDCdUefjSqecjs3sP9h/tKxqHx0efNm12ADsOd8MVx1PMqVajQQPCNsdink')
# 暗号化
encryp_msg = aes.encrypt(password)
print(encryp_msg)
# 復号化
msg = aes.decrypt(encryp_msg)
print(msg)
"""
実行結果
LP60PkZCJgZGbnLZ5TFah45KvKS5Wx+dkXlT8bYew1BdlBLWoq+V8w5GcoeVuZuB
password111