Ich denke, es ist in Ordnung, es zu kopieren und zu verwenden, aber ich kann nicht garantieren, dass der Code korrekt ist, da ich AES nicht vollständig verstehe. Wenn Sie Schwachstellen haben, teilen Sie uns dies bitte in den Kommentaren mit.
Installation ist
$ 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
Nur-Text-Daten als Argument. Schlüssel. Vektor. Wechseln Sie zunächst zu base64 (um Doppelbyte-Zeichen und Bilder in Ordnung zu bringen). Zweitens muss die verschlüsselte Anweisung ein Vielfaches von 16 Bit sein Grundsätzlich wird "_", das in base64 nicht verwendet wird, durch ein Ketsu ergänzt und in ein Vielfaches von 16 Bit konvertiert. Wenn es ein Vielfaches von 16 Bytes ist, ist es so wie es ist Ändern Sie den Schlüssel mit sha256 auf 32 Bit. Ändern Sie den Vektor mit MD5 auf 16-Bit-Länge. Verschlüsseln Sie es, konvertieren Sie es zur einfachen Übertragung in base64 und geben Sie es zurück.
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
Verschlüsselte Daten, die als Argument in base64 konvertiert wurden. Schlüssel. Vektor. Konvertieren Sie zunächst die in base64 konvertierten verschlüsselten Daten in verschlüsselte Daten. Ändern Sie dann den Schlüssel mit sha256 auf 32 Bit. Entschlüsseln und extrahieren Sie nur gültige base64 mit split ("_") [0] und kehren Sie nach der Konvertierung zurück.
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