Objekt eingebautes Objekt

ObjectECKey

Die ECKey-Klasse ist incryptoIm Modul implementiert, können Sie diese Klasse verwenden, um ECDSA-Schlüsselpaare, Signatur- und Verifizierungsnachrichten usw. zu 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 zuerst ein ECKey-Objekt secp256k1 und drucken dann die generierten öffentlichen und privaten Schlüssel. Als nächstes signierten wir die Nachricht „Hello, fibjs!“ und druckten das Signaturergebnis und verifizierten schließlich die Signatur mit demselben Schlüsselobjekt und druckten das Verifizierungsergebnis.

Erbverhältnis

Konstrukteur

ECKey

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

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

Aufrufparameter:

  • DerKey:Buffer, der Schlüssel im DER-Format
  • password: String, entschlüsseltes Passwort

Erstellen Sie ECKey aus Schlüsseln im PEM-Format

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

Aufrufparameter:

  • pemKey: String, Schlüssel im PEM-Format
  • password: String, entschlüsseltes Passwort

Erstellen Sie ECKey aus dem 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

Stellen Sie den öffentlichen Schlüssel aus einer wiederherstellbaren Signatur wieder her, nur secp256k1 wird unterstützt

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

Aufrufparameter:

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

Rückgabeergebnis:

  • 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, der Schlüssel im DER-Format
  • password: String, entschlüsseltes Passwort

Rückgabeergebnis:

  • 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: String, entschlüsseltes Passwort

Rückgabeergebnis:

  • 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ückgabeergebnis:

  • 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" }

Mitgliedsattribut

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 Signaturalgorithmus des aktuellen Objekts zurück und legt ihn fest

1
String ECKey.alg;

publicKey

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

1
readonly PKey ECKey.publicKey;

Rückgabeergebnis:

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

Mitgliedsfunktion

computeSecret

Berechnet ein Elliptic Curve Diffie-Hellman (ECDH) Shared Secret unter Verwendung des aktuellen Algorithmus

1
Buffer ECKey.computeSecret(ECKey publicKey) async;

Aufrufparameter:

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

Rückgabeergebnis:

  • Buffer, gibt das berechnete gemeinsame Geheimnis zurück

isPrivate

Abfrage, ob der aktuelle Schlüssel ein privater Schlüssel ist

1
Boolean ECKey.isPrivate();

Rückgabeergebnis:

  • Boolean, wenn True privater Schlüssel bedeutet

clone

aktuellen Schlüssel kopieren

1
PKey ECKey.clone();

Rückgabeergebnis:

  • PKey, das Kopierobjekt des aktuellen Schlüssels

pem

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

1
String ECKey.pem();

Rückgabeergebnis:

  • String, die PEM-Formatcodierung des aktuellen Schlüssels

der

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

1
Buffer ECKey.der();

Rückgabeergebnis:

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

json

Gibt die Codierung im jwt-Format des aktuellen Schlüssels zurück

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

Aufrufparameter:

  • opts: Objekt, gibt Exportoptionen an

Rückgabeergebnis:

  • Object, die jwt-Formatcodierung des aktuellen Schlüssels

opts unterstützt die folgenden Parameter:

1 2 3
{ compress: false, 指定签名以压缩方式输出公钥 }

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


equals

Vergleichen Sie, ob zwei öffentliche/private Schlüssel gleich sind

1
Boolean ECKey.equals(PKey key);

Aufrufparameter:

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

Rückgabeergebnis:

  • Boolean, geben Sie true zurück, wenn es dasselbe ist

encrypt

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

1
Buffer ECKey.encrypt(Buffer data) async;

Aufrufparameter:

  • data:Buffer, gibt die zu verschlüsselnden Daten an

Rückgabeergebnis:

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

decrypt

Entschlüsseln Sie die Daten mit dem kryptografischen privaten Schlüssel des aktuellen Algorithmus

1
Buffer ECKey.decrypt(Buffer data) async;

Aufrufparameter:

  • data:Buffer, gibt die zu entschlüsselnden Daten an

Rückgabeergebnis:

  • 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:Buffer, gibt die zu signierenden Daten an
  • opts: Objekt, gibt Signaturoptionen an

Rückgabeergebnis:

  • Buffer, gibt die signierten Daten zurück

opts unterstützt die folgenden Parameter:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
{ alg: 0, 指定签名的 hash 算法, 仅在 RSA 时有效, 缺省为 0. 支持算法: 0 = NONE, 1 = MD5, 2 = SHA1, 3 = SHA224, 4 = SHA256, 5 = SHA384, 6 = SHA512, 7 = RIPEMD160 to: pk, 指定验证方公钥, 仅在 ecsdsa 或 sm2 时有效 format: "der", 指定签名格式, 可选为 der 和 raw, 缺省为 der recoverable: false 指定返回可恢复签名, 仅在 secp256k1 有效 }

verify

Verifizieren Sie Daten mit dem kryptografischen öffentlichen Schlüssel des aktuellen Algorithmus

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

Aufrufparameter:

  • data:Buffer, wobei die zu validierenden Daten angegeben werden
  • sign:Buffer, wobei die zu überprüfende Signatur angegeben wird
  • opts: Objekt, gibt die Authentifizierungsoptionen an

Rückgabeergebnis:

  • Boolean, gibt das verifizierte Ergebnis zurück

opts unterstützt die folgenden Parameter:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
{ alg: 0, 指定签名的 hash 算法, 仅在 RSA 时有效, 缺省为 0. 支持算法: 0 = NONE, 1 = MD5, 2 = SHA1, 3 = SHA224, 4 = SHA256, 5 = SHA384, 6 = SHA512, 7 = RIPEMD160 to: pk, 指定验证方公钥, 仅在 ecsdsa 或 sm2 时有效 format: "der", 指定签名格式, 可选为 der 和 raw, 缺省为 der }

toString

Geben Sie die Zeichenfolgendarstellung des Objekts zurück, geben Sie im Allgemeinen "[Native Object]" zurück, das Objekt kann gemäß seinen eigenen Eigenschaften neu implementiert werden

1
String ECKey.toString();

Rückgabeergebnis:

  • String, gibt eine Zeichenfolgendarstellung des Objekts zurück

toJSON

Gibt die Darstellung des Objekts im JSON-Format zurück, gibt im Allgemeinen eine Sammlung lesbarer Eigenschaften zurück, die durch das Objekt definiert sind

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

Aufrufparameter:

  • key: Zeichenfolge, nicht verwendet

Rückgabeergebnis:

  • Value, die einen JSON-serialisierbaren Wert zurückgibt