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
15const 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
2new 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
2new 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
1new 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
2static ECKey ECKey.recover(Buffer data,
Buffer sig) async;
Aufrufparameter:
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
2static 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
2static 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
1static 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
1readonly String ECKey.curve;
name
String, gibt den aktuellen Algorithmusnamen zurück
1readonly String ECKey.name;
keySize
Ganzzahl, gibt die aktuelle Passwortlänge des Algorithmus in Bits zurück
1readonly Integer ECKey.keySize;
alg
String, gibt den aktuellen Objektsignaturalgorithmus zurück und legt ihn fest
1readonly String ECKey.alg;
publicKey
PKey, gibt den öffentlichen Schlüssel des aktuellen Schlüssels zurück
1readonly 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
1Buffer 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
1Boolean ECKey.isPrivate();
Rückgabeergebnisse:
- Boolean, ist True und stellt den privaten Schlüssel dar
clone
Aktuellen Schlüssel kopieren
1PKey ECKey.clone();
Rückgabeergebnisse:
- PKey, das Kopierobjekt des aktuellen Schlüssels
pem
Gibt die PEM-Formatkodierung des aktuellen Schlüssels zurück
1String ECKey.pem();
Rückgabeergebnisse:
- String, PEM-Formatkodierung des aktuellen Schlüssels
der
Gibt die DER-Formatkodierung des aktuellen Schlüssels zurück
1Buffer ECKey.der();
Rückgabeergebnisse:
- Buffer, die DER-Formatkodierung des aktuellen Schlüssels
json
Gibt die JWT-Formatkodierung des aktuellen Schlüssels zurück
1Object 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
1Boolean 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
1Buffer 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
1Buffer 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
2Buffer 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
3Boolean 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.
1String 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.
1Value ECKey.toJSON(String key = "");
Aufrufparameter:
- key: Zeichenfolge, nicht verwendet
Rückgabeergebnisse:
- Value, gibt einen Wert zurück, der JSON serialisierbar enthält