[Python] Ich habe eine Funktion erstellt, die AES entschlüsselt und entschlüsselt, indem ich sie einfach mit pycrypto geworfen habe.

Was Sie tun können - Bei Ausführung mit Klartext, Kennwort und Vektor als Argumenten werden im base64-Format verschlüsselte Daten zurückgegeben. - Wenn der Klartext durch die im base64-Format verschlüsselten und ausgeführten Daten ersetzt wird, wird der Klartext zurückgegeben.

AES-Verschlüsselungsbedingungen Der Schlüssel muss 16 Byte, 24 Byte oder 32 Byte lang sein. Klartext muss ein Vielfaches von 16 Bytes sein. Verwenden Sie iv, um das Erraten zu erschweren. In Bezug auf iv halte ich es für angemessen, dasselbe für eine Anwendung zu verwenden.

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

Verschlüsselung

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.

Entschlüsselung

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.

Ausführungsergebnis

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

[Python] Ich habe eine Funktion erstellt, die AES entschlüsselt und entschlüsselt, indem ich sie einfach mit pycrypto geworfen habe.
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Python einen Daemon erstellt
Ich habe ein Paket erstellt, das morphologische Analysegeräte mit Python vergleichen kann
[Python] Ich habe einen Bildbetrachter mit einer einfachen Sortierfunktion erstellt.
Ich habe ein Shuffle gemacht, das mit Python zurückgesetzt (zurückgesetzt) werden kann
Ich habe mit Python einen Zeichenzähler erstellt
Ich habe mit Python eine Hex-Map erstellt
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe mit Python einen Neuronensimulator erstellt
Ich habe in Python einen Discord-Bot erstellt, der übersetzt, wenn er reagiert
Ich habe ein Tool erstellt, das die Dekomprimierung mit CLI (Python3) etwas erleichtert.
Ich habe ein Modul PyNanaco erstellt, das Nanaco-Guthaben mit Python belasten kann
Ich habe mit Python eine Bot-Wettervorhersage gemacht.
Ich habe eine GUI-App mit Python + PyQt5 erstellt
Ich habe versucht, mit Python einen Twitter-Blocker für faule Mädchen zu machen
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
Ich habe mit Python ein Bin-Picking-Spiel gemacht
Mattermost Bot mit Python gemacht (+ Flask)
Eine Geschichte, der ich nach der SFTP-Kommunikation mit Python verfallen war
Ich habe ein System erstellt, das automatisch entscheidet, ob es morgen mit Python ausgeführt wird, und es zu Google Kalender hinzufügt.
Ich habe einen Twitter BOT mit GAE (Python) gemacht (mit einer Referenz)
Ich habe mit Python ein Weihnachtsbaum-Beleuchtungsspiel gemacht
Ich habe mit Python eine App für die Benachrichtigung über Netznachrichten erstellt
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
Ich habe eine Python3-Umgebung unter Ubuntu mit direnv erstellt.
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Ein Memo, dass ich den Datenspeicher mit Python berührt habe
Erstellt eine Web-App, die IT-Ereignisinformationen mit Vue und Flask abbildet
Ich habe ein System erstellt, mit dem Sie nur durch einen Anruf twittern können
Eine Geschichte, die stolperte, als ich mit Transformer einen Chat-Chat-Bot erstellte
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich habe einen Blackjack mit Python gemacht!
Verknüpfen Sie Python Enum mit einer Funktion, um es aufrufbar zu machen
Ich habe eine einfache Buch-App mit Python + Flask ~ Introduction ~ erstellt
Ich habe eine Klasse erstellt, um das Analyseergebnis von MeCab in ndarray mit Python zu erhalten
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
[Ich habe es mit Python gemacht] Tool für die Stapelausgabe von XML-Daten
Ich habe eine Funktion zum Trimmen des Bildes von Python openCV erstellt. Verwenden Sie sie daher bitte.
Ich habe mit Tkinter of Python ein Puzzlespiel (wie) gemacht
Ich habe einen harten Pomodoro-Timer entwickelt, der mit CUI funktioniert
Ich habe einen Python-Text gemacht
Ich habe mit Python einen Blackjack gemacht.
Ich habe Wordcloud mit Python gemacht.
Ich habe ein Plug-In erstellt, das "Daruma-san Fell" mit Minecraft ausführen kann
Lebensspiel mit Python [ich habe es geschafft] (auf Terminal & Tkinter)
[Python] Ich habe einen Line-Bot erstellt, der zufällig nach englischen Wörtern fragt
Ich habe eine einfache Schaltung mit Python gemacht (AND, OR, NOR, etc.)
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe mit Python, Flask und Heroku ein Nyanko-Tweet-Formular erstellt