So implementieren Sie die Verschlüsselung und Entschlüsselung vertraulicher Daten in einer MySQL-Datenbank

So implementieren Sie die Verschlüsselung und Entschlüsselung vertraulicher Daten in einer MySQL-Datenbank

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. Vorbereitung

Um 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üsselungsfunktionsmethode

2.1 MySQL-Verschlüsselung

Fü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:

FEHLER 1366 (HY000): Falscher Zeichenfolgenwert: „\xF0K+!\x15?...“ für Spalte „pwd“ in Zeile 1

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üsselung

Fü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üsselungsmethode

3.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 Python

Die 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üsselung

Der 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

pip installiere Crypto

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:
  • Analyse allgemeiner Grundvorgänge der MySQL-Datenbank [Datenbank erstellen, anzeigen, ändern und löschen]
  • So erhalten Sie Daten aus einer MySQL-Datenbank in Echarts in Django
  • Das Pycharm-Tool konnte keine Verbindung zur MySQL-Datenbank herstellen
  • Verwenden Sie pymysql in Python, um Daten in eine MySQL-Datenbank einzufügen
  • Detaillierte Erläuterung der Verbindung von Python3.6 zur MySQL-Datenbank und der Vorgänge zum Hinzufügen, Löschen, Ändern und Abfragen
  • So ändern Sie die Kodierung der MySQL-Datenbank in utf8mb4
  • Mysql-Datenbankdesign - Analyse von drei Paradigmenbeispielen

<<:  So installieren Sie Docker und konfigurieren Alibaba Cloud Image Accelerator

>>:  So verhindern Sie mit Nginx die böswillige Auflösung von IP-Adressen

Artikel empfehlen

Zusammenfassung der Blockelemente, Inline-Elemente und variablen Elemente

Blockelement p - Absatz Text vorformatieren Tisch ...

Lösung für die Ineffektivität der flexiblen Layoutbreite in CSS3

In Projekten wird häufig das zweispaltige Layout ...

Lösung für das 404-Problem der Tomcat-Installation in Docker

Suchen Sie die Container-ID von Tomcat und rufen ...

Prozessdiagramm für die Ideenbereitstellung und Tomcat-Dienstimplementierung

Konfigurieren Sie zunächst die Projektartefakte K...

Verwenden Sie das ab-Tool, um einen API-Stresstest auf dem Server durchzuführen

Inhaltsverzeichnis 1 Eine kurze Einführung in den...

Detailliertes Installationstutorial für Windows 10 + MySQL 8.0.11 Zip

Vorbereiten: Downloadadresse für das MySQL 8.0 Wi...

Analyse des Uniapp-Einsteiger-NVUE-Klettergrubenrekords

Inhaltsverzeichnis Vorwort Hallo Welt Bild Rahmen...

Detaillierte Erklärung des Linux-Befehls unzip

Inhaltsverzeichnis 1. Unzip-Befehl 1.1 Syntax 1.2...

Eine kurze Analyse des Funktionsaufrufprozesses unter der ARM-Architektur

Inhaltsverzeichnis 1. Hintergrundwissen 1. Einfüh...

JavaScript zum Erreichen eines einfachen Seiten-Countdowns

In diesem Artikelbeispiel wird der spezifische Ja...