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
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 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
2new 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
2new 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
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
Stellen Sie den öffentlichen Schlüssel aus einer wiederherstellbaren Signatur wieder her, nur secp256k1 wird unterstützt
1
2static ECKey ECKey.recover(Buffer data,
Buffer sig) async;
Aufrufparameter:
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
2static 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
2static 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
1static 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
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 Signaturalgorithmus des aktuellen Objekts zurück und legt ihn fest
1String ECKey.alg;
publicKey
PKey, gibt den öffentlichen Schlüssel des aktuellen Schlüssels zurück
1readonly 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
1Buffer 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
1Boolean ECKey.isPrivate();
Rückgabeergebnis:
- Boolean, wenn True privater Schlüssel bedeutet
clone
aktuellen Schlüssel kopieren
1PKey ECKey.clone();
Rückgabeergebnis:
- PKey, das Kopierobjekt des aktuellen Schlüssels
pem
Gibt die PEM-Formatcodierung des aktuellen Schlüssels zurück
1String ECKey.pem();
Rückgabeergebnis:
- String, die PEM-Formatcodierung des aktuellen Schlüssels
der
Gibt die DER-Formatcodierung des aktuellen Schlüssels zurück
1Buffer 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
1Object 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
1Boolean 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
1Buffer 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
1Buffer 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
2Buffer 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
3Boolean 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
1String 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
1Value ECKey.toJSON(String key = "");
Aufrufparameter:
- key: Zeichenfolge, nicht verwendet
Rückgabeergebnis:
- Value, die einen JSON-serialisierbaren Wert zurückgibt