Mit dem Beginn des Big Data-Zeitalters sind Daten zu einem der wichtigsten Vermögenswerte eines Unternehmens geworden, und die Datenverschlüsselung ist auch ein wichtiges Mittel zum Schutz von Datenbeständen. Dieser Artikel demonstriert hauptsächlich einige einfache Möglichkeiten der Datenverschlüsselung durch die Kombination des Erlernens von MySQL-Funktionen und Python-Verschlüsselungsmethoden. 1. VorbereitungUm einen späteren Vergleich zu erleichtern, werden Datensätze unterschiedlichen Typs in unterschiedlichen Tabellen gespeichert. Erstellen Sie eine Tabelle mit ursprünglichen Klartextdaten /* Erstellen Sie die ursprüngliche Datentabelle */ CREATE TABLE `f_user` ( `id` int(11) NICHT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `tel` varchar(20) DEFAULT NULL, `pwd` varchar(50) DEFAULT NULL, PRIMÄRSCHLÜSSEL (`id`) ); /* Neue Rohdaten hinzufügen */ INSERT INTO `f_user` VALUES (1,'Cao Cao','10000000000','Cc@123'),(2,'Guan Yu','21000000000','Guanyu@21'),(3,'Liu Bei','20000000000','LB#200000'); Erstellen von MySQL-verschlüsselten Tabellen CREATE TABLE `f_user_m` ( `id` int(11) NICHT NULL AUTO_INCREMENT, `name` varchar(200) DEFAULT NULL, `tel` varchar(100) DEFAULT NULL, `pwd` varbinary(255) STANDARD NULL, PRIMÄRSCHLÜSSEL (`id`) ); Erstellen einer mit Python verschlüsselten Tabelle CREATE TABLE `f_user_p` ( `id` int(11) NICHT NULL AUTO_INCREMENT, `name` varchar(200) DEFAULT NULL, `tel` varchar(100) DEFAULT NULL, `pwd` varchar(500) DEFAULT NULL, PRIMÄRSCHLÜSSEL (`id`) ); 2. MySQL-Verschlüsselungsfunktionsmethode2.1 MySQL-VerschlüsselungFügen Sie die Daten aus der Klartexttabelle in f_user_m ein und verschlüsseln und speichern Sie das Kennwortfeld pwd. Merken Sie sich die verschlüsselte Zeichenfolge, da dieser Wert beim Entschlüsseln verwendet wird. /* Verschlüsseltes Passwortfeld */ mysql> einfügen in f_user_m (Name, Tel., Passwort) Wählen Sie Name, Tel., AES_ENCRYPT (Pwd, „MySQL“) aus f_user. Abfrage OK, 3 Zeilen betroffen (0,00 Sek.) Datensätze: 3 Duplikate: 0 Warnungen: 0 Die gespeicherten Ergebnisse sind wie folgt Notiz: Wenn die verschlüsselten Daten direkt in einem Feld vom Typ varchar gespeichert werden, tritt der folgende Fehler auf:
Es gibt drei Möglichkeiten, damit umzugehen: 1) Die verschlüsselten Daten müssen in einem binären Feld wie varbinary/binary/blob im UTF-8-Zeichensatz gespeichert werden, daher wird der Typ des Kennwortfelds im obigen Text auf den Typ varbinary gesetzt. 2) Mit der Funktion HEX() können Sie die verschlüsselten Daten in ein Hexadezimalformat konvertieren und speichern. Beim Abrufen der Daten verwenden Sie UNHEX(), um sie vor dem Entschlüsseln zu verarbeiten. 3) Verwenden Sie den Zeichensatz Latin1, um direkt im Feld vom Typ varchar zu speichern, dies wird jedoch nicht empfohlen Zum Testen und zur Selbstabwicklung stehen Ihnen drei Möglichkeiten zur Verfügung. 2.2 MySQL-EntschlüsselungFür verschlüsselte Daten können Sie die MySQL-Entschlüsselungsfunktion AES_DECRYPT verwenden, um den Klartext zu entschlüsseln und anzuzeigen mysql> wähle Name, Tel., AES_DECRYPT (pwd, 'MySQL') pwd von f_user_m; +--------+----------+-----------+ | Name | Tel. | Passwort | +--------+----------+-----------+ | Cao Cao | 10000000000 | Cc@123 | | Guanyu| 21000000000 | Guanyu@21 | | Liu Bei | 20000000000 | LB#200000 | +--------+----------+-----------+ 3 Zeilen im Satz (0,00 Sek.) Die zu diesem Zeitpunkt angezeigten Daten stimmen mit der Klartexttabelle überein. 3. Python Base64-Verschlüsselungsmethode3.1 Verschlüsselung mit der Python-Methode „encodestring“Schreiben Sie ein Python-Skript, um die Daten zu verschlüsseln und in die Tabelle einzufügen #!/usr/bin/python # Kodierung=utf-8 pymysql als mdb importieren Base64 importieren sor_conn = mdb.connect(Host='127.0.0.1',Port=3306,Benutzer='root',Passwort='Root@Py123') sor_cur = sor_conn.cursor() v_sql = "Wählen Sie Name, Tel. und Passwort aus bak_db.f_user aus" result_tb = sor_cur.execute(v_sql) t = sor_cur.fetchall() für Spalte in t: v_name = col[0] v_tel = col[1] v_pwd = col[2] v_pwd = base64.encodestring(v_pwd) # Verschlüsselung v_sql_insert = "insert into bak_db.f_user_p(name,tel,pwd) values('%s','%s','%s');" %(v_name,v_tel,v_pwd) sor_cur.execute(v_sql_insert) sor_conn.commit() sor_conn.close() Die verschlüsselten Daten sind wie folgt: /* Die verschlüsselten Daten sind wie folgt*/ mysql> wähle * aus f_user_p; +----+--------+----------+---------------+ | ID | Name | Tel. | Passwort | +----+--------+----------+---------------+ | 1 | Cao Cao | 10000000000 | Q2NAMTIz | | 2 | Guan Yu | 21000000000 | R3Vhbnl1QDIx | | 3 | Liu Bei | 20000000000 | TEIjMjAwMDAw | +----+--------+----------+---------------+ 3 Zeilen im Satz (0,00 Sek.) 3.2 Entschlüsselung mit der Decodestring-Methode von PythonDie Entschlüsselungsmethode verwendet die Methode base64.decodestring, die relativ einfach ist und von Ihnen selbst getestet werden kann. Hinweis: Bei dieser Methode wird für die Ver- und Entschlüsselung kein Verschlüsselungsstring verwendet, die Sicherheit ist also relativ gering. Sie können daher weiterhin eine andere Methode verwenden. 4. Python AES-Algorithmus-VerschlüsselungDer AES-Algorithmus erfordert das Modul Crypto.Cipher. Diese Methode ähnelt der MySQL-Methode. Sie können die Verschlüsselungszeichenfolge anpassen und die entsprechende Verschlüsselungszeichenfolge kann während der Entschlüsselung verwendet werden, was relativ sicher ist. Sie müssen Crypto vor der Verwendung installieren
Der Testablauf ist wie folgt: #!/usr/bin/python # Kodierung=utf-8 von Crypto.Cipher importiere AES pymysql als mdb importieren von binascii importiere b2a_hex, a2b_hex System importieren sor_conn = mdb.connect(Host='127.0.0.1',Port=3306,Benutzer='root',Passwort='Root@Py123') sor_cur = sor_conn.cursor() Klasse PyDbString(): def __init__(selbst): self.key = "pythonkey2020320" selbst.Modus = AES.MODE_CBC def addString(selbst, Text): cryptor = AES.neu(selbst.Schlüssel, selbst.Modus, selbst.Schlüssel) Länge = 32 Anzahl = Länge(Text) add = Länge - (Anzahl % Länge) Text = Text + ('\0' * hinzufügen) selbst.ciphertext = cryptor.encrypt(text) returniere b2a_hex(self.ciphertext) def desString(selbst, Text): cryptor = AES.neu(selbst.Schlüssel, selbst.Modus, selbst.Schlüssel) Klartext = Cryptor.decrypt(a2b_hex(Text)) returniere Klartext.rstrip('\0') v_strpass = PyDbString() v_sql = "Wählen Sie Name, Tel. und Passwort aus bak_db.f_user aus" result_tb = sor_cur.execute(v_sql) t = sor_cur.fetchall() für Spalte in t: v_name = col[0] v_tel = col[1] v_pwd = col[2] drucken(v_pwd) v_pwd = v_strpass.addString(v_pwd) # Verschlüsselung v_sql_insert = "insert into bak_db.f_user_p(name,tel,pwd) values('%s','%s','%s');" %(v_name,v_tel,v_pwd) sor_cur.execute(v_sql_insert) sor_conn.commit() sor_conn.close() Zeigen Sie die Daten wie folgt an: Die Entschlüsselungsmethode kann darin bestehen, addstring im obigen Beispiel in desString zu ändern. Die oben genannten drei Methoden werden zum Verschlüsseln und Entschlüsseln von Daten verwendet. Ich persönlich empfehle die dritte Methode, bei der es sich um eine benutzerdefinierte Verschlüsselung aus der Anwendungsschicht handelt. Darüber hinaus handelt es sich bei dieser Methode nur um eine Verschlüsselung. In tatsächlichen Anwendungen können Verschlüsselung, Verschleierung und andere Desensibilisierungsmethoden erforderlich sein, um die Datensicherheit zu gewährleisten. Darüber hinaus gibt es in vielen Fällen keine Entschlüsselungsmethode, das heißt, sie ist irreversibel. Wenn Sie interessiert sind, kontaktieren Sie uns bitte. Vielen Dank! Zusammenfassen Dies ist das Ende dieses Artikels über die Implementierung der Verschlüsselung und Entschlüsselung vertraulicher Daten in einer MySQL-Datenbank. Weitere relevante Inhalte zur Verschlüsselung und Entschlüsselung von MySQL-Daten finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: So installieren Sie Docker und konfigurieren Alibaba Cloud Image Accelerator
>>: So verhindern Sie mit Nginx die böswillige Auflösung von IP-Adressen
Vorwort Angesichts der verrückten Spekulationen u...
Blockelement p - Absatz Text vorformatieren Tisch ...
In Projekten wird häufig das zweispaltige Layout ...
Object.defineProperty verstehen Grammatik: Object...
Suchen Sie die Container-ID von Tomcat und rufen ...
Gespeicherte Datenbankprozeduren DROP-VERFAHREN, ...
Konfigurieren Sie zunächst die Projektartefakte K...
1 Herunterladen Die Adresse lautet: https://dev.m...
Inhaltsverzeichnis 1 Eine kurze Einführung in den...
Sie können eine Funktion schreiben: Verwenden Sie...
Vorbereiten: Downloadadresse für das MySQL 8.0 Wi...
Inhaltsverzeichnis Vorwort Hallo Welt Bild Rahmen...
Inhaltsverzeichnis 1. Unzip-Befehl 1.1 Syntax 1.2...
Inhaltsverzeichnis 1. Hintergrundwissen 1. Einfüh...
In diesem Artikelbeispiel wird der spezifische Ja...