Modul Grundmodul

Modulcrypto

cryptoDas Modul ist fibjsein integriertes Verschlüsselungsalgorithmusmodul. Es bietet symmetrische Verschlüsselung, asymmetrische Verschlüsselung, Digest-Algorithmus, kryptografischen Zufallszahlengenerator und andere Funktionen. Vor der Verwendung require('crypto')muss das Modul über geladen werden.

Im cryptoModul stehen viele Objekte zur Verfügung, wie zum Beispiel:

  • PKey: Asymmetrisches Verschlüsselungsalgorithmusobjekt
  • X509Cert: Objekt zur Manipulation von X.509-Zertifikaten
  • Cipher: Objekt zur Implementierung der symmetrischen Verschlüsselung
  • Digest: Objekt, das zur Implementierung des Digest-Algorithmus verwendet wird

Bevor Sie den Verschlüsselungsalgorithmus verwenden, müssen Sie ein Schlüsselobjekt erstellen. Im folgenden AESBeispiel wird beispielsweise ein Schlüsselobjekt erstellt:

1 2
const crypto = require('crypto'); const key = crypto.randomBytes(16); // generate a 16-byte random key

Als nächstes verwenden Sie Cipherdas Objekt, um den Klartext zu verschlüsseln:

1 2 3 4
const c = new crypto.Cipher(crypto.AES, crypto.ECB, key); const data = 'hello, world'; const encrypted = c.encrypt(data).hex(); console.log(encrypted); // output encrypted data

AESIm obigen Beispiel wird ein verschlüsseltes CipherObjekt erstellt , encryptder Klartext mit der Methode verschlüsselt und das Verschlüsselungsergebnis zurückgegeben.

Neben symmetrischen Verschlüsselungsalgorithmen cryptokann das Modul auch asymmetrische Verschlüsselungsalgorithmen und Digest-Algorithmen unterstützen. Das folgende Beispiel ist beispielsweise Code, der PKeyObjekte Digestzur Implementierung der SHA256-Verschlüsselung verwendet:

1 2 3 4 5 6
const privateKey = crypto.loadPKey('private.pem'); // read private key from file const data = 'hello, world'; const digest = new crypto.Digest(hash.SHA256); digest.update(data); const signature = privateKey.sign(digest.digest()); console.log(signature); // output signature

Im obigen Beispiel wird zunächst eine private Schlüsseldatei gelesen und die Eingabedaten vorbereitet. Anschließend Digestwird ein SHA256-Objekt erstellt und updatedie Daten mithilfe der Methode zur Hash-Berechnung hinzugefügt. Verwenden Sie nach Abschluss der Berechnung privateKey.signdie Methode zum Signieren und Ausgeben des Signaturergebnisses.

Zusammenfassend cryptostellt das Modul eine Vielzahl von Verschlüsselungsalgorithmen, Digest-Algorithmen und zugehörigen Objekten bereit. Diese Funktionen können uns dabei helfen, verschiedene Sicherheitsanforderungen zu erfüllen, wie z. B. symmetrische und asymmetrische Verschlüsselung, digitale Signaturen und Verschlüsselungsüberprüfung.

Objekt

Cipher

CipherKonstruktor, sieheCipher

1
Cipher crypto.Cipher;

PKey

PKeyKonstruktor, siehePKey

1
PKey crypto.PKey;

ECKey

ECKeyKonstruktor, sieheECKey

1
ECKey crypto.ECKey;

BlsKey

BlsKeyKonstruktor, sieheBlsKey

1
BlsKey crypto.BlsKey;

X509Cert

X509CertKonstruktor, sieheX509Cert

1
X509Cert crypto.X509Cert;

X509Crl

X509CrlKonstruktor, sieheX509Crl

1
X509Crl crypto.X509Crl;

X509Req

X509ReqKonstruktor, sieheX509Req

1
X509Req crypto.X509Req;

statische Funktion

createHash

Erstellt ein Informationszusammenfassungsobjekt basierend auf dem angegebenen Algorithmusnamen

1
static Digest crypto.createHash(String algo);

Aufrufparameter:

  • algo: Zeichenfolge, die den Algorithmus des Informationsdigest-Objekts angibt

Rückgabeergebnisse:

  • Digest, gibt das Informationszusammenfassungsobjekt zurück

createHmac

Erstellt ein HMAC-Informationszusammenfassungsobjekt basierend auf dem angegebenen Algorithmusnamen

1 2
static Digest crypto.createHmac(String algo, Buffer key);

Aufrufparameter:

  • algo: Zeichenfolge, die den Algorithmus des Informationsdigest-Objekts angibt
  • key:Buffer, binärer Signaturschlüssel

Rückgabeergebnisse:

  • Digest, gibt das Informationszusammenfassungsobjekt zurück

loadCert

Laden Sie ein Zertifikat im CRT/PEM/DER-Format, das mehrfach aufgerufen werden kann

1
static X509Cert crypto.loadCert(String filename);

Aufrufparameter:

  • filename: Zeichenfolge, Name der Zertifikatsdatei

Rückgabeergebnisse:

  • X509Cert, gibt ein Objekt zurück, das das Zertifikat enthält

loadCrl

Laden Sie ein Sperrzertifikat im PEM/DER-Format, das mehrfach aufgerufen werden kann

1
static X509Crl crypto.loadCrl(String filename);

Aufrufparameter:

  • filename: Zeichenfolge, Dateiname des Sperrzertifikats

Rückgabeergebnisse:

  • X509Crl, gibt ein Objekt zurück, das das widerrufene Zertifikat enthält

loadReq

Laden Sie eine Zertifikatsanforderung im PEM/DER-Format, die mehrmals aufgerufen werden kann

1
static X509Req crypto.loadReq(String filename);

Aufrufparameter:

  • filename: Zeichenfolge, Name der Zertifikatsanforderungsdatei

Rückgabeergebnisse:

  • X509Req, gibt ein Objekt zurück, das das angeforderte Zertifikat enthält

loadPKey

Laden Sie einen asymmetrischen öffentlichen oder privaten Schlüssel im CRT/PEM/DER-Format

1
static PKey crypto.loadPKey(String filename);

Aufrufparameter:

  • filename: Zeichenfolge, Dateiname des öffentlichen Schlüssels oder des privaten Schlüssels

Rückgabeergebnisse:


randomBytes

Generieren Sie mit dem Havege-Generator Zufallszahlen der angegebenen Größe

1
static Buffer crypto.randomBytes(Integer size = 16) async;

Aufrufparameter:

  • size: Ganzzahl, gibt die Größe der generierten Zufallszahl an

Rückgabeergebnisse:

  • Buffer, gibt die generierte Zufallszahl zurück

simpleRandomBytes

Generieren Sie mithilfe eines schnellen Algorithmus Zufallszahlen niedriger Stärke einer bestimmten Größe

1
static Buffer crypto.simpleRandomBytes(Integer size = 16) async;

Aufrufparameter:

  • size: Ganzzahl, gibt die Größe der generierten Zufallszahl an

Rückgabeergebnisse:

  • Buffer, gibt die generierte Zufallszahl zurück

pseudoRandomBytes

Erzeugen Sie mithilfe des Entropiegenerators Pseudozufallszahlen einer bestimmten Größe

1
static Buffer crypto.pseudoRandomBytes(Integer size = 16) async;

Aufrufparameter:

  • size: Ganzzahl, gibt die Größe der generierten Zufallszahl an

Rückgabeergebnisse:

  • Buffer, gibt die generierte Zufallszahl zurück

randomFill

Verwenden Sie Zufallszahlen, um das angegebene Feld zu füllenBuffer, mit dem Havege-Generator

1 2 3
static Buffer crypto.randomFill(Buffer buffer, Integer offset = 0, Integer size = -1) async;

Aufrufparameter:

  • buffer:Buffer, geben Sie das generierte anBuffer
  • offset: Ganzzahl, gibt den Startoffset an, der Standardwert ist 0
  • size: Ganzzahl, gibt die Größe der generierten Zufallszahl an, der Standardwert ist buffer.length - Offset

Rückgabeergebnisse:

  • Buffer, gibt die generierte Zufallszahl zurück

randomArt

Erzeugt ein visuelles Zeichenbild der angegebenen Daten

1 2 3
static String crypto.randomArt(Buffer data, String title, Integer size = 8);

Aufrufparameter:

  • data:BufferGeben Sie die anzuzeigenden Daten an
  • title: Zeichenfolge, gibt den Titel des Zeichenbilds an. Multibyte-Zeichen führen zu Breitenfehlern.
  • size: Ganzzahl, Zeichenbildgröße

Rückgabeergebnisse:

  • String, gibt das generierte visuelle Zeichenfolgenbild zurück

generateKey

Generieren Sie einen privaten RSA-Schlüssel

1
static PKey crypto.generateKey(Integer size) async;

Aufrufparameter:

  • size: Ganzzahl, gibt die RSA-Schlüssellänge in Bits an

Rückgabeergebnisse:

  • PKey, gibt ein Objekt zurück, das den generierten privaten Schlüssel enthält

Generieren Sie einen privaten Schlüssel mit elliptischer Kurve

1
static PKey crypto.generateKey(String curve = "secp521r1") async;

Aufrufparameter:

  • curve: String, gibt die voreingestellte elliptische Kurve an, der Standardwert ist „secp256r1“.

Rückgabeergebnisse:

  • PKey, gibt ein Objekt zurück, das den generierten privaten Schlüssel enthält

Kurve Optionale Kurven umfassen NIST-Kurven und Aliase wie folgt:

Kurve Alias
NIST P-192 „NIST P-192“, „p192“, „P-192“, „prime192v1“, „secp192r1“
NIST P-224 „NIST P-224“, „p224“, „P-224“, „prime224v1“, „secp224r1“
NIST P-256 „NIST P-256“, „p256“, „P-256“, „prime256v1“, „secp256r1“
NIST P-384 „NIST P-384“, „p384“, „P-384“, „prime384v1“, „secp384r1“
NIST P-521 „NIST P-521“, „p521“, „P-521“, „prime521v1“, „secp521r1“

Weitere unterstützte Kurven sind: „brainpoolP512r1“, „brainpoolP384r1“, „secp256k1“, „P-256K“, „brainpoolP256r1“, „sm2p256r1“, „SM2“, „Ed25519“, „BLS12381_G1“, „BLS12381_G2“.


pbkdf1

Generieren Sie den erforderlichen Binärschlüssel basierend auf dem Klartext-Passwort basierend auf pbkdf1

1 2 3 4 5
static Buffer crypto.pbkdf1(Buffer password, Buffer salt, Integer iterations, Integer size, Integer algo) async;

Aufrufparameter:

  • password:BufferGeben Sie das zu verwendende Passwort an
  • salt:BufferGeben Sie das von hmac verwendete Salt an
  • iterations: Ganzzahl, geben Sie die Anzahl der Iterationen an
  • size: Ganzzahl, Schlüsselgröße angeben
  • algo: Ganzzahl, geben Sie die anhashAlgorithmus, siehehashModul

Rückgabeergebnisse:

  • Buffer, gibt den generierten Binärschlüssel zurück

Generieren Sie den erforderlichen Binärschlüssel basierend auf dem Klartext-Passwort basierend auf pbkdf1

1 2 3 4 5
static Buffer crypto.pbkdf1(Buffer password, Buffer salt, Integer iterations, Integer size, String algoName) async;

Aufrufparameter:

  • password:BufferGeben Sie das zu verwendende Passwort an
  • salt:BufferGeben Sie das von hmac verwendete Salt an
  • iterations: Ganzzahl, geben Sie die Anzahl der Iterationen an
  • size: Ganzzahl, Schlüsselgröße angeben
  • algoName: String, gibt die anhashAlgorithmus, siehehashModul

Rückgabeergebnisse:

  • Buffer, gibt den generierten Binärschlüssel zurück

pbkdf2

Generieren Sie den erforderlichen Binärschlüssel basierend auf dem Klartext-Passwort gemäß rfc2898

1 2 3 4 5
static Buffer crypto.pbkdf2(Buffer password, Buffer salt, Integer iterations, Integer size, Integer algo) async;

Aufrufparameter:

  • password:BufferGeben Sie das zu verwendende Passwort an
  • salt:BufferGeben Sie das von hmac verwendete Salt an
  • iterations: Ganzzahl, geben Sie die Anzahl der Iterationen an
  • size: Ganzzahl, Schlüsselgröße angeben
  • algo: Ganzzahl, geben Sie die anhashAlgorithmus, siehehashModul

Rückgabeergebnisse:

  • Buffer, gibt den generierten Binärschlüssel zurück

Generieren Sie den erforderlichen Binärschlüssel basierend auf dem Klartext-Passwort gemäß rfc2898

1 2 3 4 5
static Buffer crypto.pbkdf2(Buffer password, Buffer salt, Integer iterations, Integer size, String algoName) async;

Aufrufparameter:

  • password:BufferGeben Sie das zu verwendende Passwort an
  • salt:BufferGeben Sie das von hmac verwendete Salt an
  • iterations: Ganzzahl, geben Sie die Anzahl der Iterationen an
  • size: Ganzzahl, Schlüsselgröße angeben
  • algoName: String, gibt die anhashAlgorithmus, siehehashModul

Rückgabeergebnisse:

  • Buffer, gibt den generierten Binärschlüssel zurück

getHashes

Erhalten Sie Unterstützung für Kryptomodulehash(Abstrakte) Algorithmen wie „md5“, „sha224“

1
static Array crypto.getHashes();

Rückgabeergebnisse:

  • Array, gibt unterstützte fibjs zurückhashAlgorithmus-Array

Konstante

AES

Geben Sie den symmetrischen Verschlüsselungsalgorithmus AES an, unterstützen Sie 128, 192, 256-Bit-Schlüssel, der Blockverschlüsselungs-Arbeitsmodus unterstützt ECB, CBC, CFB128, CTR, GCM, CCM, XTS

1
const crypto.AES = 1;

DES

Gibt den symmetrischen Verschlüsselungsalgorithmus DES an, unterstützt 64-Bit-Schlüssel und der Blockverschlüsselungs-Arbeitsmodus unterstützt ECB, CBC

1
const crypto.DES = 2;

DES_EDE3

Geben Sie den symmetrischen Verschlüsselungsalgorithmus DES-EDE3 an, unterstützen Sie 192-Bit-Schlüssel, der Blockverschlüsselungs-Arbeitsmodus unterstützt ECB, CBC

1
const crypto.DES_EDE3 = 3;

CAMELLIA

Geben Sie den symmetrischen Verschlüsselungsalgorithmus CAMELLIA an, unterstützen Sie 128, 192, 256-Bit-Schlüssel, der Blockverschlüsselungs-Arbeitsmodus unterstützt ECB, CBC, CFB128, CTR, GCM, CCM

1
const crypto.CAMELLIA = 4;

ARIA

Geben Sie den symmetrischen Verschlüsselungsalgorithmus ARIA an, unterstützen Sie 128, 192, 256-Bit-Schlüssel, der Blockverschlüsselungs-Arbeitsmodus unterstützt ECB, CBC, CFB128, CTR, GCM, CCM

1
const crypto.ARIA = 5;

CHACHA20

Geben Sie den symmetrischen Verschlüsselungsalgorithmus CHACHA20 an, unterstützen Sie den 256-Bit-Schlüssel und der Blockverschlüsselungs-Arbeitsmodus unterstützt POLY1305

1
const crypto.CHACHA20 = 6;

SM4

Geben Sie den symmetrischen Verschlüsselungsalgorithmus SM4 an. Der Blockverschlüsselungs-Arbeitsmodus unterstützt ECB und CBC

1
const crypto.SM4 = 7;

ECB

Geben Sie den Blockverschlüsselungs-Arbeitsmodus an, um ECB zu unterstützen

1
const crypto.ECB = 1;

CBC

Geben Sie den Blockverschlüsselungs-Arbeitsmodus an, um CBC zu unterstützen

1
const crypto.CBC = 2;

CFB64

Geben Sie den Blockverschlüsselungs-Arbeitsmodus zur Unterstützung von CFB64 an

1
const crypto.CFB64 = 3;

CFB128

Geben Sie den Blockverschlüsselungs-Arbeitsmodus an, um CFB128 zu unterstützen

1
const crypto.CFB128 = 4;

OFB

Geben Sie den Blockverschlüsselungs-Arbeitsmodus zur Unterstützung von OFB an

1
const crypto.OFB = 5;

CTR

Geben Sie den Blockverschlüsselungs-Arbeitsmodus an, um CTR zu unterstützen

1
const crypto.CTR = 6;

GCM

Geben Sie den Blockverschlüsselungs-Arbeitsmodus zur Unterstützung von GCM an

1
const crypto.GCM = 7;

STREAM

Geben Sie den Stream-Verschlüsselungsmodus an

1
const crypto.STREAM = 8;

CCM

Geben Sie den Blockverschlüsselungs-Arbeitsmodus an, um CCM zu unterstützen

1
const crypto.CCM = 9;

XTS

Geben Sie den Blockverschlüsselungs-Arbeitsmodus an, um XTS zu unterstützen

1
const crypto.XTS = 10;

POLY1305

Geben Sie den Arbeitsmodus der Blockverschlüsselung an, um POLY1305 zu unterstützen

1
const crypto.POLY1305 = 11;

PKCS7

Geben Sie den Auffüllmodus als PKCS7 an

1
const crypto.PKCS7 = 0;

ONE_AND_ZEROS

Geben Sie den Füllmodus als ONE_AND_ZEROS an

1
const crypto.ONE_AND_ZEROS = 1;

ZEROS_AND_LEN

Geben Sie den Füllmodus als ZEROS_AND_LEN an

1
const crypto.ZEROS_AND_LEN = 2;

ZEROS

Geben Sie als Füllmodus NULLEN an

1
const crypto.ZEROS = 3;

NOPADDING

Geben Sie den Auffüllmodus als NOPADDING an

1
const crypto.NOPADDING = 4;