objetECKey
La classe ECKey est danscryptoImplémentée dans le module, vous pouvez utiliser cette classe pour générer des paires de clés ECDSA, des signatures et des messages 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 de 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. Enfin, nous avons 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, clé au format DER
- password: Chaîne, mot de passe de décryptage
Construire ECKey à partir d'une 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 de décryptage
Construire ECKey à partir d'une 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 de 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, prend uniquement en charge secp256k1
1
2static ECKey ECKey.recover(Buffer data,
Buffer sig) async;
Paramètres d'appel :
Résultats 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, clé au format DER
- password: Chaîne, mot de passe de décryptage
Résultats 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 de décryptage
Résultats 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ésultats de retour :
- PKey, renvoie un objet contenant la clé
Le format de jsonKey prend en charge les quatre types de clés privées 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 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"
}
propriétés des membres
curve
String, renvoie le nom de la courbe elliptique de l'algorithme actuel
1readonly String ECKey.curve;
name
String, 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
String, renvoie et définit l'algorithme de signature d'objet actuel
1readonly String ECKey.alg;
publicKey
PKey, renvoie la clé publique de la clé actuelle
1readonly PKey ECKey.publicKey;
Résultats de retour :
- la clé publique de la clé actuelle
fonction membre
computeSecret
Calculer la clé partagée Elliptic Curve Diffie-Hellman (ECDH) à l'aide de l'algorithme actuel
1Buffer ECKey.computeSecret(ECKey publicKey) async;
Paramètres d'appel :
- publicKey: ECKey, précisez la clé publique de l'autre partie
Résultats de retour :
- Buffer, renvoie la clé secrète partagée calculée
isPrivate
Demander si la clé actuelle est une clé privée
1Boolean ECKey.isPrivate();
Résultats de retour :
- Boolean, est True et représente la clé privée
clone
copier la clé actuelle
1PKey ECKey.clone();
Résultats de retour :
- PKey, l'objet de copie de la clé actuelle
pem
Renvoie l'encodage au format PEM de la clé actuelle
1String ECKey.pem();
Résultats de retour :
- String, encodage au format PEM de la clé actuelle
der
Renvoie l'encodage au format DER de la clé actuelle
1Buffer ECKey.der();
Résultats 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écifiez les options d'exportation
Résultats de retour :
- Object, l'encodage au format jwt de la clé actuelle
opts prend en charge les paramètres suivants :
1
2
3{
compress: false // specify whether to output public key in compressed form
}
Les courbes prenant en charge la compression sont : secp192r1, secp192k1, secp256r1, secp256k1, brainpoolP256r1, secp384r1, brainpoolP384r1, brainpoolP512r1, secp521r1, sm2.
equals
Comparez deux clés publiques/privées pour voir si elles sont identiques
1Boolean ECKey.equals(object key);
Paramètres d'appel :
- key:object, précisez la clé publique/privée de l'autre partie
Résultats de retour :
- Boolean, s'ils sont identiques, renvoie vrai
encrypt
Chiffrer les données à l'aide de la clé publique de chiffrement de l'algorithme actuel
1Buffer ECKey.encrypt(Buffer data) async;
Paramètres d'appel :
- data:Buffer, précisez les données à chiffrer
Résultats de retour :
- Buffer, renvoie les données chiffrées
decrypt
Décrypter les données à l'aide de la clé privée du mot de passe de l'algorithme actuel
1Buffer ECKey.decrypt(Buffer data) async;
Paramètres d'appel :
- data:Buffer, précisez les données à décrypter
Résultats de retour :
- Buffer, renvoie les données décrypté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, spécifiez les données à signer. Lorsque l'algorithme est RSA, le paramètre d'entrée doit être exécuté avec l'algorithme spécifié par alg.hash
- opts: Objet, spécifiez les options de signature
Résultats de retour :
- Buffer, renvoie les données signées
opts prend en charge les paramètres suivants :
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
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, précisez les données à vérifier
- sign:Buffer, précisez la signature à vérifier
- opts: Objet, spécifiez les options de vérification
Résultats de retour :
- Boolean, renvoie le résultat vérifié
opts prend en charge les paramètres suivants :
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
Renvoie la représentation sous forme de chaîne de l'objet. Généralement, "[Native Object]" est renvoyé. L'objet peut être réimplémenté en fonction de ses propres caractéristiques.
1String ECKey.toString();
Résultats de retour :
- String, renvoie la représentation sous forme de chaîne de l'objet
toJSON
Renvoie une représentation au format JSON de l'objet, renvoyant 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ésultats de retour :
- Value, renvoie une valeur contenant du JSON sérialisable