Detaillierte Erläuterung des Nest.js-Hashing- und Verschlüsselungsbeispiels

Detaillierte Erläuterung des Nest.js-Hashing- und Verschlüsselungsbeispiels

0x0 Einführung

Zunächst einmal: Was ist ein Hash-Algorithmus? Ein Algorithmus, der einen Hashwert für ein bestimmtes Datenelement, beispielsweise eine Nachricht oder ein Sitzungselement, erzeugt. MD5 ist beispielsweise ein Hashing-Algorithmus. Eine Hash-Funktion oder ein Hash-Algorithmus in der Softwareentwicklung, auch Hashfunktion genannt, ist eine Methode zur Erstellung eines kleinen digitalen „Fingerabdrucks“ aus beliebigen Daten. Alle Hashfunktionen haben eine grundlegende Eigenschaft: Wenn zwei Hashwerte unterschiedlich sind (gemäß derselben Funktion), dann sind auch die ursprünglichen Eingaben der beiden Hashwerte unterschiedlich.

Verschlüsselungsalgorithmen werden üblicherweise in symmetrische und asymmetrische Verschlüsselungsalgorithmen unterteilt. Bei symmetrischen Verschlüsselungsalgorithmen müssen beide Parteien, die die Informationen erhalten, den Schlüssel sowie den Verschlüsselungs- und Entschlüsselungsalgorithmus im Voraus kennen und ihre Schlüssel müssen identisch sein. Dann können die Daten verschlüsselt und entschlüsselt werden. Der asymmetrische Algorithmus unterscheidet sich hiervon. Die sendenden Parteien A und B generieren im Voraus einen Schlüsselbund, und dann sendet A seinen öffentlichen Schlüssel an B und B sendet seinen öffentlichen Schlüssel an A. Wenn A eine Nachricht an B senden möchte, muss er zuerst den öffentlichen Schlüssel von B verwenden, um die Nachricht zu verschlüsseln, und sie dann an B senden. Zu diesem Zeitpunkt verwendet B seinen eigenen privaten Schlüssel, um die Nachricht zu entschlüsseln. Dasselbe Prinzip gilt, wenn B eine Nachricht an A sendet.

Im Wesentlichen verwandeln sowohl Hashing als auch Verschlüsselung ein Objekt in eine bedeutungslose Zeichenfolge. Der Unterschied besteht darin, dass das gehashte Objekt nicht wiederhergestellt werden kann und es sich um einen Einwegprozess handelt. Beispielsweise werden Passwörter normalerweise mithilfe eines Hash-Algorithmus verschlüsselt. Wenn ein Benutzer also sein Passwort vergisst, kann er es nur ändern, aber nicht an das ursprüngliche Passwort gelangen. Bei der Verschlüsselung von Informationen handelt es sich jedoch um einen herkömmlichen Verschlüsselungsalgorithmus, und die verschlüsselten Informationen können mit dem geheimen Schlüssel entschlüsselt und wiederhergestellt werden.

Hashing und Verschlüsselung

Hashing ist der Prozess der Konvertierung eines Schlüsselwerts in einen anderen Schlüsselwert durch einen mathematischen Algorithmus. Die Hash-Funktion wird verwendet, um die Konvertierung zu generieren, und der Ausgabeinhalt kann nicht wiederhergestellt werden. Es wird hauptsächlich zur Kennwortspeicherung verwendet, wenn Daten gehasht werden müssen.

Unter Verschlüsselung versteht man die Verschlüsselung von Informationen, also die Umwandlung der ursprünglichen Informationen in Geheimtext. Sie wird im Allgemeinen verwendet, wenn der Client vertrauliche Informationen wie Passwörter an den Server sendet. Die Informationen werden vor dem Senden verschlüsselt und dann auf dem Server entschlüsselt.

0x1-Hashing

Das Node.js-Ökosystem hat viele Abhängigkeiten, wie Bcrypt und Argon2, die einfach zu verwenden sind. Dieses Mal wird Bcrypt verwendet, um den Hash-Prozess zu implementieren:

Garn fügt bcrypt hinzu
Garn addieren @types/bcrypt -D

Dann kapseln Sie das gehashte Geschäft:

importiere { Injectable } von '@nestjs/common'
importiere * als bcrypt von 'bcrypt'

@Injizierbar()
Exportklasse BcryptService {
 private statische schreibgeschützte SALT_ROUNDS: Zahl = 10
 /**
 * Passwort vergleichen und prüfen * @param rawStr
 * @param hashedStr
 */
 asynchroner Vergleich(rawStr: Zeichenfolge, hashedStr: Zeichenfolge) {
 gibt bcrypt.compare(rawStr, hashedStr) zurück
 }
 /**
 * Hash generieren
 * @param rawStr
 * @param Salz
 */
 asynchroner Hash (rawStr: Zeichenfolge, Salt?: Zeichenfolge) {
 gibt bcrypt.hash zurück (rawStr, salt || BcryptService.SALT_ROUNDS)
 }
 /**
 * Salz erzeugen */
 async genSalt() {
 gibt bcrypt.genSalt zurück (BcryptService.SALT_ROUNDS)
 }
}

0x2-Verschlüsselung

Das Node.js-System verfügt über ein Verschlüsselungsmodul, das zum Verschlüsseln und Entschlüsseln sowie für andere damit verbundene Vorgänge verwendet werden kann. Im Folgenden wird die AES-256-CTR-Verschlüsselung zum Verschlüsseln von Daten verwendet:

importiere { createCipheriv, randomBytes } von 'crypto'
importiere { promisify } von 'util'

const iv = zufälligeBytes(16)
const password = 'Zum Generieren des Schlüssels verwendetes Passwort'

// Die Schlüssellänge hängt vom Algorithmus ab // Bei aes256 ist sie 32 Bytes lang const key = (await promisify(scrypt)(password, 'salt', 32)) as Buffer
const cipher = createCipheriv('aes-256-ctr', Schlüssel, iv)

const textToEncrypt = "Nest"
const verschlüsselterText = Buffer.concat([
 cipher.update(Zuverschlüsselnder Text),
 cipher.final()
])

Wenn Sie entschlüsseln müssen, ist das auch ganz einfach:

importiere { createDecipheriv } von 'crypto'

const decipher = createDecipheriv('aes-256-ctr', Schlüssel, iv)
const entschlüsselterText = Buffer.concat([
 decipher.update(verschlüsselterText),
 entschlüsseln.final()
])

0x3 Referenz

Verschlüsselung und Hashing

Node.js-Krypto

node.bcrypt.js

Zusammenfassen

Dies ist das Ende dieses Artikels über Nest.js-Hashing und -Verschlüsselung. Weitere verwandte Inhalte zu Nest.js-Hashing und -Verschlüsselung finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

<<:  Beispielcode für die Master-Slave-Trennung einer MySQL-Datenbank

>>:  Beispiel für eine Domänennamenüberprüfungsmethode für Betrieb und Wartung von Nginx

Artikel empfehlen

Analyse des Parameterübertragungsprozesses des Treibermoduls in Linux

Deklarieren Sie den Parameternamen, den Typ und d...

Anwendungsbeispiele für React Hooks (6 gängige Hooks)

1. useState: Funktionskomponenten Status geben An...

So verstehen Sie die semantische HTML-Struktur

Ich glaube, jeder kennt HTML und CSS, kennt die T...

30 Tipps zum Schreiben von HTML-Code

1. HTML-Tags immer schließen Im Quellcode der vor...

So optimieren Sie die langsame Like-Fuzzy-Abfrage in MySQL

Inhaltsverzeichnis 1. Einleitung: 2. Die erste Id...

Zusammenfassung häufig verwendeter CSS-Kapselungsmethoden

1. PC-Reset Initialisierung im PC-Stil /* normali...

Ubuntu installiert mehrere Versionen von CUDA und wechselt jederzeit

Ich werde nicht erklären, was CUDA ist, sondern d...

Skin-Change-Lösung basierend auf Vue kombiniert mit ElementUI

Inhaltsverzeichnis Vorne geschrieben Lösung 1: Gl...

HTML Table Tag Tutorial (47): Verschachtelte Tabellen

<br />Der Schriftsatz auf der Seite erfolgt ...

JS erhält Fünf-Sterne-Lob

In diesem Artikel wird der spezifische Code von J...

So handhaben Sie den Token-Ablauf in WeChat-Miniprogrammen

Inhaltsverzeichnis Fazit zuerst Frage Lösung Verw...

So legen Sie die Position des Blockelements in der Mitte des Fensters fest

So legen Sie die Position des Blockelements in de...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.11 (Win10)

In diesem Artikel werden die Installations- und K...