Modulcrypto
crypto
Das Modul ist fibjs
ein 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 crypto
Modul stehen viele Objekte zur Verfügung, wie zum Beispiel:
PKey
: Asymmetrisches VerschlüsselungsalgorithmusobjektX509Cert
: Objekt zur Manipulation von X.509-ZertifikatenCipher
: Objekt zur Implementierung der symmetrischen VerschlüsselungDigest
: Objekt, das zur Implementierung des Digest-Algorithmus verwendet wird
Bevor Sie den Verschlüsselungsalgorithmus verwenden, müssen Sie ein Schlüsselobjekt erstellen. Im folgenden AES
Beispiel wird beispielsweise ein Schlüsselobjekt erstellt:
1
2const crypto = require('crypto');
const key = crypto.randomBytes(16); // generate a 16-byte random key
Als nächstes verwenden Sie Cipher
das Objekt, um den Klartext zu verschlüsseln:
1
2
3
4const 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
AES
Im obigen Beispiel wird ein verschlüsseltes Cipher
Objekt erstellt , encrypt
der Klartext mit der Methode verschlüsselt und das Verschlüsselungsergebnis zurückgegeben.
Neben symmetrischen Verschlüsselungsalgorithmen crypto
kann das Modul auch asymmetrische Verschlüsselungsalgorithmen und Digest-Algorithmen unterstützen. Das folgende Beispiel ist beispielsweise Code, der PKey
Objekte Digest
zur Implementierung der SHA256-Verschlüsselung verwendet:
1
2
3
4
5
6const 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 Digest
wird ein SHA256-Objekt erstellt und update
die Daten mithilfe der Methode zur Hash-Berechnung hinzugefügt. Verwenden Sie nach Abschluss der Berechnung privateKey.sign
die Methode zum Signieren und Ausgeben des Signaturergebnisses.
Zusammenfassend crypto
stellt 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
1Cipher crypto.Cipher;
PKey
1PKey crypto.PKey;
ECKey
1ECKey crypto.ECKey;
BlsKey
BlsKeyKonstruktor, sieheBlsKey
1BlsKey crypto.BlsKey;
X509Cert
X509CertKonstruktor, sieheX509Cert
1X509Cert crypto.X509Cert;
X509Crl
X509CrlKonstruktor, sieheX509Crl
1X509Crl crypto.X509Crl;
X509Req
X509ReqKonstruktor, sieheX509Req
1X509Req crypto.X509Req;
statische Funktion
createHash
Erstellt ein Informationszusammenfassungsobjekt basierend auf dem angegebenen Algorithmusnamen
1static 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
2static 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
1static 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
1static 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
1static 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
1static 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
1static 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
1static 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
1static 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
3static 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
3static 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
1static 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
1static 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
5static 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
5static 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
5static 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
5static 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“
1static 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
1const 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
1const 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
1const 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
1const 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
1const 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
1const crypto.CHACHA20 = 6;
SM4
Geben Sie den symmetrischen Verschlüsselungsalgorithmus SM4 an. Der Blockverschlüsselungs-Arbeitsmodus unterstützt ECB und CBC
1const crypto.SM4 = 7;
ECB
Geben Sie den Blockverschlüsselungs-Arbeitsmodus an, um ECB zu unterstützen
1const crypto.ECB = 1;
CBC
Geben Sie den Blockverschlüsselungs-Arbeitsmodus an, um CBC zu unterstützen
1const crypto.CBC = 2;
CFB64
Geben Sie den Blockverschlüsselungs-Arbeitsmodus zur Unterstützung von CFB64 an
1const crypto.CFB64 = 3;
CFB128
Geben Sie den Blockverschlüsselungs-Arbeitsmodus an, um CFB128 zu unterstützen
1const crypto.CFB128 = 4;
OFB
Geben Sie den Blockverschlüsselungs-Arbeitsmodus zur Unterstützung von OFB an
1const crypto.OFB = 5;
CTR
Geben Sie den Blockverschlüsselungs-Arbeitsmodus an, um CTR zu unterstützen
1const crypto.CTR = 6;
GCM
Geben Sie den Blockverschlüsselungs-Arbeitsmodus zur Unterstützung von GCM an
1const crypto.GCM = 7;
STREAM
Geben Sie den Stream-Verschlüsselungsmodus an
1const crypto.STREAM = 8;
CCM
Geben Sie den Blockverschlüsselungs-Arbeitsmodus an, um CCM zu unterstützen
1const crypto.CCM = 9;
XTS
Geben Sie den Blockverschlüsselungs-Arbeitsmodus an, um XTS zu unterstützen
1const crypto.XTS = 10;
POLY1305
Geben Sie den Arbeitsmodus der Blockverschlüsselung an, um POLY1305 zu unterstützen
1const crypto.POLY1305 = 11;
PKCS7
Geben Sie den Auffüllmodus als PKCS7 an
1const crypto.PKCS7 = 0;
ONE_AND_ZEROS
Geben Sie den Füllmodus als ONE_AND_ZEROS an
1const crypto.ONE_AND_ZEROS = 1;
ZEROS_AND_LEN
Geben Sie den Füllmodus als ZEROS_AND_LEN an
1const crypto.ZEROS_AND_LEN = 2;
ZEROS
Geben Sie als Füllmodus NULLEN an
1const crypto.ZEROS = 3;
NOPADDING
Geben Sie den Auffüllmodus als NOPADDING an
1const crypto.NOPADDING = 4;