ObjetECKey
La classe ECKey est encryptoImplémentée dans le module, vous pouvez utiliser cette classe pour générer des paires de clés ECDSA, des messages de signature et de vérification, etc.
Voici un exemple:
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);
Dans cet exemple, nous générons d'abord un objet ECKey secp256k1, puis imprimons les clés publiques et privées générées. Ensuite, nous avons signé le message "Bonjour, fibjs!" et imprimé le résultat de la signature, et enfin vérifié la signature en utilisant le même objet clé, et imprimé le résultat de la vérification.
relation d'héritage
Constructeur
ECKey
Construire ECKey à partir d'une clé au format DER
1
2new ECKey(Buffer DerKey,
String password = "");
Paramètres d'appel :
- DerKey:Buffer, la clé au format DER
- password: Chaîne, mot de passe déchiffré
Construire ECKey à partir de la clé au format PEM
1
2new ECKey(String pemKey,
String password = "");
Paramètres d'appel :
- pemKey: Chaîne, clé au format PEM
- password: Chaîne, mot de passe déchiffré
Construire ECKey à partir de la clé au format JSON
1new ECKey(Object jsonKey);
Paramètres d'appel :
- jsonKey: Objet, clé au format JSON
Le format de jsonKey prend en charge les deux types suivants, clé privée EC :
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"
}
Clé publique CE :
1
2
3
4
5
6{
"kty": "EC",
"crv": "P-521",
"x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL",
"y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU"
}
fonction statique
recover
récupérer la clé publique à partir de la signature récupérable, seul secp256k1 pris en charge
1
2static ECKey ECKey.recover(Buffer data,
Buffer sig) async;
Paramètres d'appel :
résultat de retour :
- ECKey, renvoie un objet contenant la clé publique
from
Charger une clé au format DER
1
2static PKey ECKey.from(Buffer DerKey,
String password = "");
Paramètres d'appel :
- DerKey:Buffer, la clé au format DER
- password: Chaîne, mot de passe déchiffré
résultat de retour :
- PKey, renvoie un objet contenant la clé
Charger une clé au format PEM
1
2static PKey ECKey.from(String pemKey,
String password = "");
Paramètres d'appel :
- pemKey: Chaîne, clé au format PEM
- password: Chaîne, mot de passe déchiffré
résultat de retour :
- PKey, renvoie un objet contenant la clé
Charger une clé au format JSON
1static PKey ECKey.from(Object jsonKey);
Paramètres d'appel :
- jsonKey: Objet, clé au format JSON
résultat de retour :
- PKey, renvoie un objet contenant la clé
Le format de jsonKey prend en charge les quatre types de clé privée RSA suivants :
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=="
}
Clé publique RSA :
1
2
3
4
5{
"kty": "RSA",
"n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=",
"e": "AQAB"
}
Clé privée CE :
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"
}
Clé publique CE :
1
2
3
4
5
6{
"kty": "EC",
"crv": "P-521",
"x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL",
"y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU"
}
attribut de membre
curve
Chaîne, renvoie le nom de la courbe elliptique de l'algorithme actuel
1readonly String ECKey.curve;
name
Chaîne, renvoie le nom de l'algorithme actuel
1readonly String ECKey.name;
keySize
Entier, renvoie la longueur actuelle du mot de passe de l'algorithme en bits
1readonly Integer ECKey.keySize;
alg
Chaîne, renvoie et définit l'algorithme de signature de l'objet courant
1String ECKey.alg;
publicKey
PKey, retourne la clé publique de la clé courante
1readonly PKey ECKey.publicKey;
résultat de retour :
- la clé publique de la clé courante
fonction membre
computeSecret
Calcule un secret partagé Elliptic Curve Diffie-Hellman (ECDH) en utilisant l'algorithme actuel
1Buffer ECKey.computeSecret(ECKey publicKey) async;
Paramètres d'appel :
- publicKey: ECKey, spécifiez la clé publique de l'autre partie
résultat de retour :
- Buffer, renvoie le secret partagé calculé
isPrivate
Demander si la clé actuelle est une clé privée
1Boolean ECKey.isPrivate();
résultat de retour :
- Boolean, si True signifie clé privée
clone
copier la clé actuelle
1PKey ECKey.clone();
résultat de retour :
- PKey, l'objet de copie de la clé actuelle
pem
Renvoie l'encodage au format PEM de la clé courante
1String ECKey.pem();
résultat de retour :
- String, l'encodage au format PEM de la clé courante
der
Renvoie l'encodage au format DER de la clé actuelle
1Buffer ECKey.der();
résultat de retour :
- Buffer, l'encodage au format DER de la clé actuelle
json
Renvoie l'encodage au format jwt de la clé actuelle
1Object ECKey.json(Object opts = {});
Paramètres d'appel :
- opts: Objet, spécifie les options d'exportation
résultat de retour :
- Object, l'encodage au format jwt de la clé courante
opts prend en charge les paramètres suivants :
1
2
3{
compress: false, 指定签名以压缩方式输出公钥
}
Les courbes qui prennent en charge la compression sont : secp192r1, secp192k1, secp256r1, secp256k1, brainpoolP256r1, secp384r1, brainpoolP384r1, brainpoolP512r1, secp521r1, sm2
equals
Comparer si deux clés publiques/privées sont identiques
1Boolean ECKey.equals(PKey key);
Paramètres d'appel :
- key:PKey, spécifiez la clé publique/privée de l'autre partie
résultat de retour :
- Boolean, renvoie true si le même
encrypt
Crypter les données à l'aide de la clé publique cryptographique de l'algorithme actuel
1Buffer ECKey.encrypt(Buffer data) async;
Paramètres d'appel :
- data:Buffer, spécifie les données à chiffrer
résultat de retour :
- Buffer, renvoie les données chiffrées
decrypt
Déchiffrer les données à l'aide de la clé privée cryptographique de l'algorithme actuel
1Buffer ECKey.decrypt(Buffer data) async;
Paramètres d'appel :
- data:Buffer, précise les données à déchiffrer
résultat de retour :
- Buffer, renvoie les données déchiffrées
sign
Signer les données à l'aide de la clé privée cryptographique de l'algorithme actuel
1
2Buffer ECKey.sign(Buffer data,
Object opts = {}) async;
Paramètres d'appel :
- data:Buffer, précise les données à signer
- opts: Objet, spécifie les options de signature
résultat de retour :
- Buffer, renvoie les données signées
opts prend en charge les paramètres suivants :
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
Vérifier les données à l'aide de la clé publique cryptographique de l'algorithme actuel
1
2
3Boolean ECKey.verify(Buffer data,
Buffer sign,
Object opts = {}) async;
Paramètres d'appel :
- data:Buffer, en précisant les données à valider
- sign:Buffer, en précisant la signature à vérifier
- opts: Objet, spécifie les options d'authentification
résultat de retour :
- Boolean, renvoie le résultat vérifié
opts prend en charge les paramètres suivants :
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
Renvoie la représentation sous forme de chaîne de l'objet, renvoie généralement "[Native Object]", l'objet peut être réimplémenté selon ses propres caractéristiques
1String ECKey.toString();
résultat de retour :
- String, renvoie une représentation sous forme de chaîne de l'objet
toJSON
Renvoie la représentation au format JSON de l'objet, renvoie généralement une collection de propriétés lisibles définies par l'objet
1Value ECKey.toJSON(String key = "");
Paramètres d'appel :
- key: Chaîne, non utilisée
résultat de retour :
- Value, qui renvoie une valeur sérialisable JSON