ObjectECKey
De ECKey-les is binnencryptoGeïmplementeerd in de module, kunt u deze klasse gebruiken om ECDSA-sleutelparen, handtekening- 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 secp256k1 ECKey-object en drukken vervolgens de gegenereerde publieke en private sleutels af. Vervolgens ondertekenden we het bericht "Hallo, fibjs!" en drukten we het handtekeningresultaat af, en tenslotte verifieerden we de handtekening met hetzelfde sleutelobject en drukten we het verificatieresultaat af.
erfenis relatie
Constructeur
ECKey
Construeer ECKey uit een sleutel in DER-formaat
1
2new ECKey(Buffer DerKey,
String password = "");
Oproepparameters:
- DerKey:Buffer, de sleutel in DER-indeling
- password: Tekenreeks, gedecodeerd wachtwoord
Construeer ECKey uit sleutel in PEM-indeling
1
2new ECKey(String pemKey,
String password = "");
Oproepparameters:
- pemKey: Tekenreeks, sleutel in PEM-indeling
- password: Tekenreeks, gedecodeerd wachtwoord
Construeer ECKey uit de sleutel in JSON-formaat
1new ECKey(Object jsonKey);
Oproepparameters:
- jsonKey: Object, sleutel in JSON-indeling
Het formaat van jsonKey ondersteunt de volgende twee typen, EC private key:
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"
}
EG openbare sleutel:
1
2
3
4
5
6{
"kty": "EC",
"crv": "P-521",
"x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL",
"y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU"
}
statische functie
recover
openbare sleutel herstellen van herstelbare handtekening, alleen secp256k1 wordt ondersteund
1
2static ECKey ECKey.recover(Buffer data,
Buffer sig) async;
Oproepparameters:
retour resultaat:
- ECKey, retourneert een object dat de openbare sleutel bevat
from
Laad een sleutel in DER-indeling
1
2static PKey ECKey.from(Buffer DerKey,
String password = "");
Oproepparameters:
- DerKey:Buffer, de sleutel in DER-indeling
- password: Tekenreeks, gedecodeerd wachtwoord
retour resultaat:
- PKey, retourneert een object dat de sleutel bevat
Laad een sleutel in PEM-indeling
1
2static PKey ECKey.from(String pemKey,
String password = "");
Oproepparameters:
- pemKey: Tekenreeks, sleutel in PEM-indeling
- password: Tekenreeks, gedecodeerd wachtwoord
retour resultaat:
- 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
retour resultaat:
- PKey, retourneert een object dat de sleutel bevat
Het formaat van jsonKey ondersteunt de volgende vier typen RSA-privésleutel:
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=="
}
RSA openbare sleutel:
1
2
3
4
5{
"kty": "RSA",
"n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=",
"e": "AQAB"
}
EG-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"
}
EG openbare sleutel:
1
2
3
4
5
6{
"kty": "EC",
"crv": "P-521",
"x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL",
"y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU"
}
lid attribuut
curve
Tekenreeks, retourneert de naam van de elliptische curve van het huidige algoritme
1readonly String ECKey.curve;
name
Tekenreeks, retourneert de naam van het huidige algoritme
1readonly String ECKey.name;
keySize
Integer, retourneert de huidige wachtwoordlengte van het algoritme in bits
1readonly Integer ECKey.keySize;
alg
String, retourneert en stelt het handtekeningalgoritme van het huidige object in
1String ECKey.alg;
publicKey
PKey, retourneert de openbare sleutel van de huidige sleutel
1readonly PKey ECKey.publicKey;
retour resultaat:
- de openbare sleutel van de huidige sleutel
lid functie
computeSecret
Berekent een Elliptic Curve Diffie-Hellman (ECDH) gedeeld geheim met behulp van het huidige algoritme
1Buffer ECKey.computeSecret(ECKey publicKey) async;
Oproepparameters:
- publicKey: ECKey, specificeer de openbare sleutel van de andere partij
retour resultaat:
- Buffer, retourneert het berekende gedeelde geheim
isPrivate
Vraag of de huidige sleutel een persoonlijke sleutel is
1Boolean ECKey.isPrivate();
retour resultaat:
- Boolean, als True persoonlijke sleutel betekent
clone
kopieer de huidige sleutel
1PKey ECKey.clone();
retour resultaat:
- PKey, het kopieerobject van de huidige sleutel
pem
Retourneert de codering in PEM-indeling van de huidige sleutel
1String ECKey.pem();
retour resultaat:
- String, de codering in PEM-indeling van de huidige sleutel
der
Retourneert de DER-indelingscodering van de huidige sleutel
1Buffer ECKey.der();
retour resultaat:
- 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, specificeert exportopties
retour resultaat:
- Object, de codering in jwt-indeling van de huidige sleutel
opts ondersteunt de volgende parameters:
1
2
3{
compress: false, 指定签名以压缩方式输出公钥
}
De curven die compressie ondersteunen zijn: secp192r1, secp192k1, secp256r1, secp256k1, brainpoolP256r1, secp384r1, brainpoolP384r1, brainpoolP512r1, secp521r1, sm2
equals
Vergelijk of twee publieke/private sleutels hetzelfde zijn
1Boolean ECKey.equals(PKey key);
Oproepparameters:
- key:PKey, geeft u de openbare/privésleutel van de andere partij op
retour resultaat:
- Boolean, geef waar terug als hetzelfde
encrypt
Versleutel gegevens met behulp van de huidige cryptografische openbare sleutel van het algoritme
1Buffer ECKey.encrypt(Buffer data) async;
Oproepparameters:
- data:Buffer, geeft aan welke gegevens moeten worden gecodeerd
retour resultaat:
- Buffer, retourneert de versleutelde gegevens
decrypt
Ontsleutel de gegevens met behulp van de cryptografische privésleutel van het huidige algoritme
1Buffer ECKey.decrypt(Buffer data) async;
Oproepparameters:
- data:Buffer, specificeert de gegevens die moeten worden gedecodeerd
retour resultaat:
- 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, specificeert de te ondertekenen gegevens
- opts: Object, specificeert handtekeningopties
retour resultaat:
- Buffer, retourneert de ondertekende gegevens
opts ondersteunt de volgende parameters:
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
Verifieer gegevens met behulp van de cryptografische openbare sleutel van het huidige algoritme
1
2
3Boolean ECKey.verify(Buffer data,
Buffer sign,
Object opts = {}) async;
Oproepparameters:
- data:Buffer, waarbij de gegevens worden opgegeven die moeten worden gevalideerd
- sign:Buffer, met vermelding van de handtekening die moet worden geverifieerd
- opts: Object, specificeert de authenticatie-opties
retour resultaat:
- Boolean, retourneert het geverifieerde resultaat
opts ondersteunt de volgende parameters:
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
Retourneert de tekenreeksrepresentatie van het object, retourneert over het algemeen "[Native Object]", het object kan opnieuw worden geïmplementeerd volgens zijn eigen kenmerken
1String ECKey.toString();
retour resultaat:
- String, retourneert een tekenreeksrepresentatie van het object
toJSON
Retourneert de weergave in JSON-indeling van het object, retourneert over het algemeen een verzameling leesbare eigenschappen die door het object zijn gedefinieerd
1Value ECKey.toJSON(String key = "");
Oproepparameters:
- key: String, niet gebruikt
retour resultaat:
- Value, die een JSON-serialiseerbare waarde retourneert