Verschlüsselung und Entschlüsselung sind wichtige Mittel, um die Kommunikationssicherheit zu gewährleisten. Es gibt bereits viele Verschlüsselungsalgorithmen und ausgereifte Softwarepakete. Dies reduziert die Belastung der Anwendungsentwickler erheblich. Sie müssen nur die von Drittanbietern bereitgestellten Verschlüsselungs- und Entschlüsselungsbibliotheken verwenden. Tatsächlich bietet Node.js ein sehr leistungsstarkes und praktisches Verschlüsselungs- und Entschlüsselungsmodul Crypto. Wir müssen keine NPM-Bibliotheken von Drittanbietern verwenden, um einfache Verschlüsselungs- und Entschlüsselungsfunktionen zu implementieren. Schließlich besteht der Zweck der Verwendung von Verschlüsselung und Entschlüsselung darin, die Kommunikationssicherheit zu gewährleisten. Die Verwendung inoffizieller Bibliotheken von Drittanbietern kann immer Hintertüren oder ähnliches enthalten. Die Verwendung des mit Node.js gelieferten Crypto-Moduls kann die Sicherheit der Verschlüsselung maximieren. Hashwertberechnung crypto.HashDie Hashwertberechnung wird normalerweise verwendet, um die Integrität und Richtigkeit von Daten zu überprüfen. Wenn wir sicherstellen müssen, dass die empfangenen Daten genau mit den gesendeten Daten übereinstimmen, können wir den Hashwert der gesendeten Daten bzw. den Hashwert der empfangenen Daten berechnen. Ein einfacher Vergleich wird zeigen, dass die Hashwerte zweier identischer Datensätze gleich sein müssen. Der Hashwert kann nicht rückgängig gemacht werden, um die Originaldaten wiederherzustellen; er kann daher nur zur Datenüberprüfung verwendet werden. Wie verwendet man es also in Node.js? Beispielcode const crypto = erforderlich('Krypto'); const hash = crypto.createHash('sha256'); hash.update('einige zu hashende Daten'); Konsole.log(hash.digest('hex')); // Druckt: // 6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50 Der obige Code wurde aus dem offiziellen Node.js-Democode kopiert. Ich habe die einfachste Verwendungsmethode gewählt, die auch die am häufigsten verwendete ist, nämlich die Berechnung des Hashwerts einer Zeichenfolge oder eines Datensatzes. Der von crypto.Hash implementierte Hash-Algorithmus verwendet als Berechnungsoperator ein festes Geheimwort Secret. Es gibt in Node.js auch eine ähnliche Verschlüsselungsklasse crypto.Hmac, die das Geheimwort Secret jedoch ändern kann. Veränderbare Hash-Berechnung crypto.HmacBeispielcode const crypto = erforderlich('Krypto'); const hmac = crypto.createHmac('sha256', 'ein Geheimnis'); hmac.update('einige zu hashende Daten'); Konsole.log(hmac.digest('hex')); // Druckt: // 7fd04df92f636fd450bc841c9418e5825c17f33ad9c87c518115a45971f7f77e Die Verwendung von crypto.Hmac ist der von crypto.Hash sehr ähnlich. Der einzige Unterschied besteht darin, dass es ein zusätzliches anpassbares Geheimwort Secret gibt. Ein Zweck der Verwendung eines angepassten Geheimworts Secret besteht darin, die Sicherheit beim Speichern von Passwörtern zu verbessern. Wenn Sie die Hash-Algorithmus-Funktion des standardmäßigen Geheimworts Secret verwenden, können Sie das Passwort durch Brute-Force-Kollision erhalten, solange Sie wissen, welcher Algorithmus verwendet wird. Wenn Sie jedoch eine Hash-Funktion mit einem angepassten Geheimwort Secret verwenden, ist es selbst mit einer umfassenden Methode fast unmöglich, es zu knacken. Symmetrische Ver- und EntschlüsselungSymmetrische Verschlüsselung und Entschlüsselung bedeutet, dass sowohl der Verschlüsseler als auch der Entschlüsseler dasselbe geheime Wort Secret verwenden, um Verschlüsselungs- und Entschlüsselungsalgorithmusoperationen durchzuführen. Dieser Verschlüsselungsalgorithmus erfordert keinen öffentlichen und privaten Schlüssel und ist bequemer zu verwenden. Darüber hinaus kann die symmetrische Verschlüsselung und Entschlüsselung im Gegensatz zum Hash-Algorithmus bidirektional und umkehrbar sein. Node.js unterstützt viele symmetrische Verschlüsselungsalgorithmen, aber welche Verschlüsselungsalgorithmen verwendet werden, hängt von dem auf Ihrem Computer installierten OpenSSL ab. Node.js ruft einfach OpenSSL auf. Dies bringt uns zu einem Problem, nämlich dass es keine Möglichkeit gibt, die Informationen zum Verschlüsselungsalgorithmus im Dokument zu finden. Wir werden später wissen, wo das Problem liegt. Verwendungsprozess der symmetrischen VerschlüsselungBeispielcode für die Verschlüsselung const crypto = erforderlich('Krypto'); const-Algorithmus = "aes-192-cbc"; const password = 'Zum Generieren des Schlüssels verwendetes Passwort'; // Verwenden Sie stattdessen das asynchrone „crypto.scrypt()“. const key = crypto.scryptSync(Passwort, „Salz“, 24); // Verwenden Sie `crypto.randomBytes`, um einen zufälligen IV anstelle des statischen IV zu generieren // hier gezeigt. const iv = Buffer.alloc(16, 0); // Initialisierungsvektor. const cipher = crypto.createCipheriv(Algorithmus, Schlüssel, iv); let encrypted = cipher.update('einige Klartextdaten', 'utf8', 'hex'); verschlüsselt += cipher.final('hex'); console.log(verschlüsselt); // Druckt: e5f79c5915c02171eec6b212d5520d44480993d7d622a7c4c2da32f6efda0ffa Lassen Sie uns diesen Code Schritt für Schritt erklären. const-Algorithmus = "aes-192-cbc"; Diese Zeile definiert den verwendeten Verschlüsselungsalgorithmus. Sie besteht normalerweise aus drei Teilen, die in der Mitte durch - verbunden sind. Der erste Teil ist der Name des Verschlüsselungsalgorithmus aes, der zweite Teil ist die Verschlüsselungslänge 192 Bit und der dritte Teil ist die Verschlüsselungsauthentifizierungsmethode (dieser Teil kann missverstanden werden) cbc const key = crypto.scryptSync(Passwort, „Salz“, 24); Diese Zeile generiert den Schlüssel. Beachten Sie die letzte Zahl 24, die die Länge des generierten Schlüssels angibt. Das Minimum ist 8, und es gibt keine Höchstgrenze, aber es muss ein Vielfaches von 8 sein. Die Länge des Schlüssels hängt vom verwendeten Verschlüsselungsalgorithmus ab. Da diese Informationen nicht im Dokument enthalten sind, können Sie es nur weiter versuchen, wenn Sie sie verwenden, andernfalls erhalten Sie eine Fehlermeldung! const iv = Buffer.alloc(16, 0); // Initialisierungsvektor. const cipher = crypto.createCipheriv(Algorithmus, Schlüssel, iv); Zeile 6 erstellt den Initialisierungsvektor, was ein sehr kritischer Punkt ist, aber im Dokument nicht erklärt wird. Die Länge von IV ist ebenfalls kritisch. Derzeit wissen wir nur, dass die Länge ein Vielfaches von 8 sein muss und dass die Länge mit der Anzahl der Bits des verwendeten Algorithmus zusammenhängt. Es gibt jedoch keine klare Erklärung im Dokument, sodass wir es nur weiter versuchen können, wenn wir es verwenden. Es ist schade, dass die Längen der beiden Schlüsselparameter, des Schlüssels und des Initialisierungsvektors, in der Node.js-Dokumentation nicht klar angegeben sind. Wenn wir sie verwenden, müssen wir daher entweder Informationen zum Verschlüsselungsalgorithmus nachschlagen oder sie manuell einzeln ausprobieren, was sehr umständlich ist. let encrypted = cipher.update('einige Klartextdaten', 'utf8', 'hex'); verschlüsselt += cipher.final('hex'); Diese beiden Zeilen sind sehr einfach. Sie verschlüsseln lediglich die Eingabezeichenfolge. In update(...,'utf8', 'hex') ist utf8 das Kodierungsformat der Zeichenfolge vor der Verschlüsselung und hex das Kodierungsformat der Ausgabe nach der Verschlüsselung. Zum Schluss müssen wir nach der verschlüsselten Zeichenfolge noch ein Endzeichen hinzufügen. Diese Aufgabe wird von final('hex') erledigt. Hex ist auch das Zeichenkodierungsformat der Ausgabe. Symmetrischer EntschlüsselungsprozessBeispielcode zur Entschlüsselung const crypto = erforderlich('Krypto'); const-Algorithmus = "aes-192-cbc"; const password = 'Zum Generieren des Schlüssels verwendetes Passwort'; // Verwenden Sie stattdessen das asynchrone „crypto.scrypt()“. const key = crypto.scryptSync(Passwort, „Salz“, 24); // Der IV wird normalerweise zusammen mit dem Geheimtext weitergegeben. const iv = Buffer.alloc(16, 0); // Initialisierungsvektor. const decipher = crypto.createDecipheriv(Algorithmus, Schlüssel, iv); // Das Obige ist der Verschlüsselungsteil. // Denn die Schlüssel und Initialisierungsvektoren für die Verschlüsselung und Entschlüsselung müssen gleich sein. // Deshalb werden Verschlüsselung und Entschlüsselung kombiniert. // Mit demselben Algorithmus, Schlüssel und iv verschlüsselt. const verschlüsselt = „e5f79c5915c02171eec6b212d5520d44480993d7d622a7c4c2da32f6efda0ffa“; let entschlüsselt = decipher.update(verschlüsselt, „hex“, „utf8“); entschlüsselt += decipher.final('utf8'); console.log(entschlüsselt); // Druckt: einige Klartextdaten Die Entschlüsselung ist der umgekehrte Prozess der Verschlüsselung, und die zu beachtenden Punkte sind dieselben, d. h. die Länge der beiden Parameter, der Schlüssel Key und der Initialisierungsvektor. Ein weiterer zu beachtender Punkt ist, dass der erste Parameter der decipher.update-Eingabe nur eine Zeichenfolge sein kann, kein Puffertyp. Ich persönlich bin der Meinung, dass die Verwendung von Buffer eine bessere Leistung bieten sollte, und diese Art der Unterstützung wird möglicherweise in Zukunft hinzugefügt. AbschlussDamit ist dieser Artikel über die Verwendung des integrierten Verschlüsselungsmoduls von Nodejs zur Implementierung von Peer-to-Peer-Verschlüsselung und -Entschlüsselung abgeschlossen. Weitere Informationen zur Peer-to-Peer-Verschlüsselung und -Entschlüsselung von Nodejs finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: So legen Sie ein Kennwort für MySQL Version 5.6 auf dem Mac fest
>>: Windows Server 2019 installieren (grafisches Tutorial)
Code kopieren Der Code lautet wie folgt: <HTML...
Aktivieren Sie Remote-Zugriffsrechte für MySQL My...
In diesem Artikel wird der spezifische Code von r...
Allerdings ist die Häufigkeit des Shell-Starts se...
Beim Erstellen einer Website treten immer wieder P...
Hallo zusammen, als ich mir heute das HTML des We...
Inhaltsverzeichnis 1. Einleitung Zweites Training...
Tag-Typ (Anzeigemodus) HTML-Tags werden im Allgem...
Vorwort In diesem Artikel werden hauptsächlich di...
Autor | Herausgeber Awen | Produziert von Tu Min ...
Dieser Artikel stellt das Flex-Layout vor, um ein...
Installieren Sie mysql5.7 unter Win. Zu Ihrer Inf...
In diesem Artikel erfahren Sie, wie Sie mit JavaS...
=================================================...
Wirkung html <Text> <div Klasse="In...