Objekt integriertes Objekt

objectECKey

Die ECKey-Klasse ist incryptoMit dieser im Modul implementierten Klasse können Sie ECDSA-Schlüsselpaare, Signaturen und Verifizierungsnachrichten usw. generieren.

Hier ist ein Beispiel:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
const crypto = require("crypto"); // generate a secp256k1 key const key = crypto.generateKey("secp256k1"); console.log("Private key:", key.pem()); console.log("Public key:", key.publicKey.pem()); const message = "Hello, fibjs!"; // sign a message const sig = key.sign(message); console.log("Signature:", sig.hex()); // very the signature const verify = key.verify(message, sig); console.log("Verify result:", verify);

In diesem Beispiel generieren wir zunächst ein ECKey-Objekt von secp256k1 und drucken dann die generierten öffentlichen und privaten Schlüssel aus. Als nächstes signierten wir die Nachricht „Hallo, fibjs!“ und druckten das Signaturergebnis aus. Schließlich überprüften wir die Signatur mit demselben Schlüsselobjekt und druckten das Überprüfungsergebnis aus.

Erbschaftsverhältnis

Konstrukteur

ECKey

Konstruieren Sie ECKey aus einem Schlüssel im DER-Format

1 2
new ECKey(Buffer DerKey, String password = "");

Aufrufparameter:

  • DerKey:Buffer, Schlüssel im DER-Format
  • password: Zeichenfolge, Entschlüsselungskennwort

Konstruieren Sie ECKey aus einem Schlüssel im PEM-Format

1 2
new ECKey(String pemKey, String password = "");

Aufrufparameter:

  • pemKey: String, Schlüssel im PEM-Format
  • password: Zeichenfolge, Entschlüsselungskennwort

Konstruieren Sie ECKey aus einem Schlüssel im JSON-Format

1
new ECKey(Object jsonKey);

Aufrufparameter:

  • jsonKey: Objekt, Schlüssel im JSON-Format

Das Format von jsonKey unterstützt die folgenden zwei Arten von privaten EC-Schlüsseln:

1 2 3 4 5 6 7
{ "kty": "EC", "crv": "P-521", "x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL", "y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU", "d": "AfkIbUHXfW41njdpoKuqqKludcoLJS8D_oMEwkj-GVaXFNKccIoF5iKGu2c69kNDjo83R_7wyGlfRczsklkik1ST" }

Öffentlicher EC-Schlüssel:

1 2 3 4 5 6
{ "kty": "EC", "crv": "P-521", "x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL", "y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU" }

statische Funktion

recover

Öffentlichen Schlüssel aus wiederherstellbarer Signatur wiederherstellen, unterstützt nur secp256k1

1 2
static ECKey ECKey.recover(Buffer data, Buffer sig) async;

Aufrufparameter:

  • data:Buffer, die Originaldaten der Signatur
  • sig:Buffer, wiederherstellbare Signatur

Rückgabeergebnisse:

  • ECKey, gibt ein Objekt zurück, das den öffentlichen Schlüssel enthält

from

Laden Sie einen Schlüssel im DER-Format

1 2
static PKey ECKey.from(Buffer DerKey, String password = "");

Aufrufparameter:

  • DerKey:Buffer, Schlüssel im DER-Format
  • password: Zeichenfolge, Entschlüsselungskennwort

Rückgabeergebnisse:

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

Laden Sie einen Schlüssel im PEM-Format

1 2
static PKey ECKey.from(String pemKey, String password = "");

Aufrufparameter:

  • pemKey: String, Schlüssel im PEM-Format
  • password: Zeichenfolge, Entschlüsselungskennwort

Rückgabeergebnisse:

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

Laden Sie einen Schlüssel im JSON-Format

1
static PKey ECKey.from(Object jsonKey);

Aufrufparameter:

  • jsonKey: Objekt, Schlüssel im JSON-Format

Rückgabeergebnisse:

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

Das Format von jsonKey unterstützt die folgenden vier Arten von privaten RSA-Schlüsseln:

1 2 3 4 5 6 7 8 9 10 11
{ "kty": "RSA", "n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=", "e": "AQAB", "d": "agN2O9NxMHL1MTMi75WfL9Pxvl-KWXKqZSF6mjzAsF9iKI8euyHIXYFepzU8kual1RsjDhCnzvWqFvZplW8lXqrHf_P-rS_9Y4gBUw6pjnI_DnFIRwWHRvrUHHSCfWOdTCIKdOTkgLZuGFuhEY3RMIW0WSYejjLtftwy0RVxAzk=", "p": "6a4G1qmfwWmn1biigN7IVFlkbLf9oVe6g7rOmHxI-hn1GRxKDSVuAUrmR1IhuAnca9M0y7SD-7TUs6wjOxWxaw==", "q": "5ofkxFKdPBD0CQHMb9q13AMHUVe0rJ-hSjqqIBrmqApUOneyAcMV76M0QyIQnI2p3POa4Qu_7XChDwRVl7LlDQ==", "dp": "2mXGiGwCHl8j-FBWuID-1C6z-BRB3MBEVoeKPOOzxOPruatB3mWEGXsqG7A8SWgV9URxTI2K6P3J6Z7RUpBkvw==", "dq": "oagn5vfb5NQqnOpS9xkSsD67cfIj821ZSFlNFYhnuOzNVda7z_qCtnHm4zDPH0lEFXoKYMfBhfqWJpaugttjPQ==", "qi": "dqEQgxNmOVFrF4s776hTqeC6oEDila8EvpVb2F2ZvwAOLjCQ66OiAZK1BiYGHqUy0NeqNmtlsLSuBEZQZvqZwg==" }

Öffentlicher RSA-Schlüssel:

1 2 3 4 5
{ "kty": "RSA", "n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=", "e": "AQAB" }

Privater EC-Schlüssel:

1 2 3 4 5 6 7
{ "kty": "EC", "crv": "P-521", "x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL", "y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU", "d": "AfkIbUHXfW41njdpoKuqqKludcoLJS8D_oMEwkj-GVaXFNKccIoF5iKGu2c69kNDjo83R_7wyGlfRczsklkik1ST" }

Öffentlicher EC-Schlüssel:

1 2 3 4 5 6
{ "kty": "EC", "crv": "P-521", "x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL", "y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU" }

Mitgliedereigenschaften

curve

String, gibt den Namen der elliptischen Kurve des aktuellen Algorithmus zurück

1
readonly String ECKey.curve;

name

String, gibt den aktuellen Algorithmusnamen zurück

1
readonly String ECKey.name;

keySize

Ganzzahl, gibt die aktuelle Passwortlänge des Algorithmus in Bits zurück

1
readonly Integer ECKey.keySize;

alg

String, gibt den aktuellen Objektsignaturalgorithmus zurück und legt ihn fest

1
readonly String ECKey.alg;

publicKey

PKey, gibt den öffentlichen Schlüssel des aktuellen Schlüssels zurück

1
readonly PKey ECKey.publicKey;

Rückgabeergebnisse:

  • der öffentliche Schlüssel des aktuellen Schlüssels

Mitgliedsfunktion

computeSecret

Berechnen Sie den gemeinsamen Elliptic Curve Diffie-Hellman (ECDH)-Schlüssel mit dem aktuellen Algorithmus

1
Buffer ECKey.computeSecret(ECKey publicKey) async;

Aufrufparameter:

  • publicKey: ECKey, geben Sie den öffentlichen Schlüssel der anderen Partei an

Rückgabeergebnisse:

  • Buffer, gibt den berechneten gemeinsamen geheimen Schlüssel zurück

isPrivate

Fragen Sie ab, ob der aktuelle Schlüssel ein privater Schlüssel ist

1
Boolean ECKey.isPrivate();

Rückgabeergebnisse:

  • Boolean, ist True und stellt den privaten Schlüssel dar

clone

Aktuellen Schlüssel kopieren

1
PKey ECKey.clone();

Rückgabeergebnisse:

  • PKey, das Kopierobjekt des aktuellen Schlüssels

pem

Gibt die PEM-Formatkodierung des aktuellen Schlüssels zurück

1
String ECKey.pem();

Rückgabeergebnisse:

  • String, PEM-Formatkodierung des aktuellen Schlüssels

der

Gibt die DER-Formatkodierung des aktuellen Schlüssels zurück

1
Buffer ECKey.der();

Rückgabeergebnisse:

  • Buffer, die DER-Formatkodierung des aktuellen Schlüssels

json

Gibt die JWT-Formatkodierung des aktuellen Schlüssels zurück

1
Object ECKey.json(Object opts = {});

Aufrufparameter:

  • opts: Objekt, Exportoptionen angeben

Rückgabeergebnisse:

  • Object, die JWT-Formatkodierung des aktuellen Schlüssels

opts unterstützt die folgenden Parameter:

1 2 3
{ compress: false // specify whether to output public key in compressed form }

Kurven, die die Komprimierung unterstützen, sind: secp192r1, secp192k1, secp256r1, secp256k1, brainpoolP256r1, secp384r1, brainpoolP384r1, brainpoolP512r1, secp521r1, sm2


equals

Vergleichen Sie zwei öffentliche/private Schlüssel, um festzustellen, ob sie identisch sind

1
Boolean ECKey.equals(object key);

Aufrufparameter:

  • key:objectGeben Sie den öffentlichen/privaten Schlüssel der anderen Partei an

Rückgabeergebnisse:

  • Boolean, wenn sie gleich sind, geben Sie true zurück

encrypt

Verschlüsseln Sie Daten mit dem öffentlichen Verschlüsselungsschlüssel des aktuellen Algorithmus

1
Buffer ECKey.encrypt(Buffer data) async;

Aufrufparameter:

  • data:BufferGeben Sie die zu verschlüsselnden Daten an

Rückgabeergebnisse:

  • Buffer, gibt die verschlüsselten Daten zurück

decrypt

Entschlüsseln Sie Daten mit dem privaten Schlüssel des aktuellen Algorithmus-Passworts

1
Buffer ECKey.decrypt(Buffer data) async;

Aufrufparameter:

  • data:BufferGeben Sie die zu entschlüsselnden Daten an

Rückgabeergebnisse:

  • Buffer, gibt die entschlüsselten Daten zurück

sign

Signieren Sie Daten mit dem kryptografischen privaten Schlüssel des aktuellen Algorithmus

1 2
Buffer ECKey.sign(Buffer data, Object opts = {}) async;

Aufrufparameter:

  • data:BufferGeben Sie die zu signierenden Daten an. Wenn der Algorithmus RSA ist, muss der Eingabeparameter mit dem durch alg angegebenen Algorithmus ausgeführt werden.hash
  • opts: Objekt, Signaturoptionen angeben

Rückgabeergebnisse:

  • Buffer, geben Sie die signierten Daten zurück

opts unterstützt die folgenden Parameter:

1 2 3 4 5
{ alg: 0, // specify the hash algorithm for signing, only valid for RSA, default is 0. Supported algorithms: 0=NONE,1=MD5,2=SHA1,3=SHA224,4=SHA256,5=SHA384,6=SHA512,7=RIPEMD160 format: "der", // specify the signature format, default is der, supported formats: der, raw recoverable: false // specify whether to return a recoverable signature, only valid for secp256k1 }

verify

Überprüfen Sie die Daten mithilfe des kryptografischen öffentlichen Schlüssels des aktuellen Algorithmus

1 2 3
Boolean ECKey.verify(Buffer data, Buffer sign, Object opts = {}) async;

Aufrufparameter:

  • data:BufferGeben Sie die zu überprüfenden Daten an
  • sign:BufferGeben Sie die zu überprüfende Signatur an
  • opts: Objekt, Überprüfungsoptionen angeben

Rückgabeergebnisse:

  • Boolean, gibt das verifizierte Ergebnis zurück

opts unterstützt die folgenden Parameter:

1 2 3 4
{ alg: 0, // specify the hash algorithm for signing, only valid for RSA, default is 0. Supported algorithms: 0=NONE,1=MD5,2=SHA1,3=SHA224,4=SHA256,5=SHA384,6=SHA512,7=RIPEMD160 format: "der" // specify the signature format, default is der, supported formats: der, raw }

toString

Gibt die Zeichenfolgendarstellung des Objekts zurück. Im Allgemeinen wird „[Native Object]“ zurückgegeben. Das Objekt kann gemäß seinen eigenen Eigenschaften neu implementiert werden.

1
String ECKey.toString();

Rückgabeergebnisse:

  • String, gibt die Zeichenfolgendarstellung des Objekts zurück

toJSON

Gibt eine Darstellung des Objekts im JSON-Format zurück und gibt im Allgemeinen eine Sammlung lesbarer Eigenschaften zurück, die vom Objekt definiert werden.

1
Value ECKey.toJSON(String key = "");

Aufrufparameter:

  • key: Zeichenfolge, nicht verwendet

Rückgabeergebnisse:

  • Value, gibt einen Wert zurück, der JSON serialisierbar enthält