objectECKey
De ECKey-klasse is binnencryptoGeïmplementeerd in de module, kunt u deze klasse gebruiken om ECDSA-sleutelparen, handtekeningen en verificatieberichten, enz. te genereren.
Hier is een voorbeeld:
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 dit voorbeeld genereren we eerst een ECKey-object van secp256k1 en drukken vervolgens de gegenereerde publieke en private sleutels af. Vervolgens hebben we het bericht "Hallo, fibjs! " ondertekend en het handtekeningresultaat afgedrukt. Ten slotte hebben we de handtekening geverifieerd met hetzelfde sleutelobject en het verificatieresultaat afgedrukt.
erfenis relatie
Constructeur
ECKey
Construeer ECKey van sleutel in DER-formaat
1
2new ECKey(Buffer DerKey,
String password = "");
Oproepparameters:
- DerKey:Buffer, toets in DER-formaat
- password: String, decoderingswachtwoord
Construeer ECKey van sleutel in PEM-formaat
1
2new ECKey(String pemKey,
String password = "");
Oproepparameters:
- pemKey: String, sleutel in PEM-formaat
- password: String, decoderingswachtwoord
Construeer ECKey van sleutel in JSON-indeling
1new ECKey(Object jsonKey);
Oproepparameters:
- jsonKey: Object, sleutel in JSON-indeling
Het formaat van jsonKey ondersteunt de volgende twee typen EC-privésleutel:
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"
}
Publieke sleutel van de EC:
1
2
3
4
5
6{
"kty": "EC",
"crv": "P-521",
"x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL",
"y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU"
}
statische functie
recover
Herstel de openbare sleutel van een herstelbare handtekening, ondersteunt alleen secp256k1
1
2static ECKey ECKey.recover(Buffer data,
Buffer sig) async;
Oproepparameters:
Resultaten retourneren:
- ECKey, retourneert een object dat de publieke sleutel bevat
from
Laad een sleutel in DER-formaat
1
2static PKey ECKey.from(Buffer DerKey,
String password = "");
Oproepparameters:
- DerKey:Buffer, toets in DER-formaat
- password: String, decoderingswachtwoord
Resultaten retourneren:
- PKey, retourneert een object dat de sleutel bevat
Laad een sleutel in PEM-formaat
1
2static PKey ECKey.from(String pemKey,
String password = "");
Oproepparameters:
- pemKey: String, sleutel in PEM-formaat
- password: String, decoderingswachtwoord
Resultaten retourneren:
- PKey, retourneert een object dat de sleutel bevat
Laad een sleutel in JSON-indeling
1static PKey ECKey.from(Object jsonKey);
Oproepparameters:
- jsonKey: Object, sleutel in JSON-indeling
Resultaten retourneren:
- PKey, retourneert een object dat de sleutel bevat
Het formaat van jsonKey ondersteunt de volgende vier typen RSA-privésleutels:
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=="
}
Openbare RSA-sleutel:
1
2
3
4
5{
"kty": "RSA",
"n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=",
"e": "AQAB"
}
EC-privésleutel:
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"
}
Publieke sleutel van de EC:
1
2
3
4
5
6{
"kty": "EC",
"crv": "P-521",
"x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL",
"y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU"
}
eigenschappen van leden
curve
String, retourneert de elliptische curvenaam van het huidige algoritme
1readonly String ECKey.curve;
name
String, retourneert de huidige algoritmenaam
1readonly String ECKey.name;
keySize
Geheel getal, retourneert de huidige wachtwoordlengte van het algoritme in bits
1readonly Integer ECKey.keySize;
alg
String, retourneert en stelt het huidige objecthandtekeningalgoritme in
1readonly String ECKey.alg;
publicKey
PKey, retourneert de openbare sleutel van de huidige sleutel
1readonly PKey ECKey.publicKey;
Resultaten retourneren:
- de publieke sleutel van de huidige sleutel
lid functie
computeSecret
Bereken de gedeelde sleutel Elliptic Curve Diffie-Hellman (ECDH) met behulp van het huidige algoritme
1Buffer ECKey.computeSecret(ECKey publicKey) async;
Oproepparameters:
- publicKey: ECKey, specificeer de openbare sleutel van de andere partij
Resultaten retourneren:
- Buffer, retourneert de berekende gedeelde geheime sleutel
isPrivate
Vraag of de huidige sleutel een privésleutel is
1Boolean ECKey.isPrivate();
Resultaten retourneren:
- Boolean, is True en vertegenwoordigt de privésleutel
clone
kopieer de huidige sleutel
1PKey ECKey.clone();
Resultaten retourneren:
- PKey, het kopieerobject van de huidige sleutel
pem
Retourneert de PEM-indelingscodering van de huidige sleutel
1String ECKey.pem();
Resultaten retourneren:
- String, PEM-formaatcodering van de huidige sleutel
der
Retourneert de DER-indelingscodering van de huidige sleutel
1Buffer ECKey.der();
Resultaten retourneren:
- Buffer, de DER-formaatcodering van de huidige sleutel
json
Retourneert de jwt-indelingscodering van de huidige sleutel
1Object ECKey.json(Object opts = {});
Oproepparameters:
- opts: Object, exportopties opgeven
Resultaten retourneren:
- Object, de jwt-indelingscodering van de huidige sleutel
opts ondersteunt de volgende parameters:
1
2
3{
compress: false // specify whether to output public key in compressed form
}
Curven die compressie ondersteunen zijn: secp192r1, secp192k1, secp256r1, secp256k1, brainpoolP256r1, secp384r1, brainpoolP384r1, brainpoolP512r1, secp521r1, sm2
equals
Vergelijk twee publieke/privésleutels om te zien of ze hetzelfde zijn
1Boolean ECKey.equals(object key);
Oproepparameters:
- key:object, geef de openbare/privésleutel van de andere partij op
Resultaten retourneren:
- Boolean, als ze hetzelfde zijn, retourneert u waar
encrypt
Versleutel gegevens met behulp van de huidige openbare sleutel voor algoritmecodering
1Buffer ECKey.encrypt(Buffer data) async;
Oproepparameters:
- data:Buffer, geef de gegevens op die moeten worden gecodeerd
Resultaten retourneren:
- Buffer, retourneert de gecodeerde gegevens
decrypt
Decodeer gegevens met behulp van de huidige privésleutel van het algoritme
1Buffer ECKey.decrypt(Buffer data) async;
Oproepparameters:
- data:Buffer, specificeer de gegevens die moeten worden gedecodeerd
Resultaten retourneren:
- Buffer, retourneert de gedecodeerde gegevens
sign
Onderteken gegevens met behulp van de huidige cryptografische privésleutel van het algoritme
1
2Buffer ECKey.sign(Buffer data,
Object opts = {}) async;
Oproepparameters:
- data:Buffer, specificeer de gegevens die moeten worden ondertekend. Als het algoritme RSA is, moet de invoerparameter worden uitgevoerd met het algoritme dat is opgegeven door alg.hash
- opts: Object, handtekeningopties opgeven
Resultaten retourneren:
- Buffer, retourneer de ondertekende gegevens
opts ondersteunt de volgende parameters:
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
Verifieer gegevens met behulp van de huidige cryptografische openbare sleutel van het algoritme
1
2
3Boolean ECKey.verify(Buffer data,
Buffer sign,
Object opts = {}) async;
Oproepparameters:
- data:Buffer, specificeer de gegevens die moeten worden geverifieerd
- sign:Buffer, geef de handtekening op die moet worden geverifieerd
- opts: Object, verificatieopties opgeven
Resultaten retourneren:
- Boolean, retourneert het geverifieerde resultaat
opts ondersteunt de volgende parameters:
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
Retourneert de tekenreeksweergave van het object. Over het algemeen wordt '[Native Object]' geretourneerd. Het object kan opnieuw worden geïmplementeerd op basis van zijn eigen kenmerken.
1String ECKey.toString();
Resultaten retourneren:
- String, retourneert de tekenreeksrepresentatie van het object
toJSON
Retourneert een weergave in JSON-indeling van het object, waarbij doorgaans een verzameling leesbare eigenschappen wordt geretourneerd die door het object zijn gedefinieerd.
1Value ECKey.toJSON(String key = "");
Oproepparameters:
- key: Tekenreeks, niet gebruikt
Resultaten retourneren:
- Value, retourneert een waarde die JSON-serialiseerbaar bevat