Je pense que c'est correct de le copier et de l'utiliser, mais je ne peux pas garantir que le code est correct car je ne comprends pas parfaitement AES. Si vous avez des vulnérabilités, veuillez nous en informer dans les commentaires.
L'installation est
$ pip install pycrypto
get_encrypt_data.py
from Crypto.Cipher import AES
import hashlib
import base64
def get_encrypt_data(raw_data, key, iv):
raw_data_base64 = base64.b64encode(raw_data)
# 16byte
if len(raw_data_base64) % 16 != 0:
raw_data_base64_16byte = raw_data_base64
for i in range(16 - (len(raw_data_base64) % 16)):
raw_data_base64_16byte += "_"
else:
raw_data_base64_16byte = raw_data_base64
secret_key = hashlib.sha256(key).digest()
iv = hashlib.md5(iv).digest()
crypto = AES.new(secret_key, AES.MODE_CBC, iv)
cipher_data = crypto.encrypt(raw_data_base64_16byte)
cipher_data_base64 = base64.b64encode(cipher_data)
return cipher_data_base64
Données de texte brut comme argument. clé. vecteur. Tout d'abord, passez à base64 (pour que les caractères et les images à deux octets soient ok) Deuxièmement, l'instruction chiffrée doit être un multiple de 16 bits, donc Fondamentalement, "_" qui n'est pas utilisé dans base64 est complété par un ketsu et converti en un multiple de 16 bits. Si c'est un multiple de 16 octets, c'est comme ça Changez la clé en 32 bits avec sha256. Modifiez le vecteur à une longueur de 16 bits avec MD5. Cryptez-le, convertissez-le en base64 pour une transmission facile et renvoyez-le.
get_decrypt_data.py
from Crypto.Cipher import AES
import hashlib
import base64
def get_decrypt_data(cipher_data_base64, key, iv):
cipher_data = base64.b64decode(cipher_data_base64)
secret_key = hashlib.sha256(key).digest()
iv = hashlib.md5(iv).digest()
crypto = AES.new(secret_key, AES.MODE_CBC, iv)
raw_data_base64_16byte = crypto.decrypt(cipher_data)
raw_data_base64 = raw_data_base64_16byte.split("_")[0]
raw_data = base64.b64decode(raw_data_base64)
return raw_data
Données chiffrées converties en base64 comme argument. clé. vecteur. Tout d'abord, convertissez les données cryptées converties en base64 en données cryptées. Puis changez la clé en 32 bits avec sha256. Décrypter et extraire uniquement base64 valide avec split ("_") [0] et renvoyer après la conversion.
main.py
if __name__ == "__main__":
message = "114514"
password = "This is password"
iv = "hoge"
encrypt_data = get_encrypt_data(message, password, iv)
print encrypt_data
decrypt_data = get_decrypt_data(encrypt_data, password, iv)
print decrypt_data
cmd.sh
$ r64FMFs04APfNQo2d6uFpQ==
$ 114514
Recommended Posts