objetoECKey
La clase ECKey está encryptoImplementada en el módulo, puede utilizar esta clase para generar pares de claves ECDSA, firmas y mensajes de verificación, etc.
Aquí hay un ejemplo:
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);
En este ejemplo, primero generamos un objeto ECKey de secp256k1 y luego imprimimos las claves públicas y privadas generadas. A continuación, firmamos el mensaje "¡Hola, fibjs!" e imprimimos el resultado de la firma. Finalmente, verificamos la firma usando el mismo objeto clave e imprimimos el resultado de la verificación.
relación de herencia
Constructor
ECKey
Construir ECKey a partir de clave en formato DER
1
2new ECKey(Buffer DerKey,
String password = "");
Parámetros de llamada:
- DerKey:Buffer, clave en formato DER
- password: Cadena, contraseña de descifrado
Construir ECKey a partir de clave en formato PEM
1
2new ECKey(String pemKey,
String password = "");
Parámetros de llamada:
- pemKey: Cadena, clave en formato PEM
- password: Cadena, contraseña de descifrado
Construya ECKey a partir de la clave en formato JSON
1new ECKey(Object jsonKey);
Parámetros de llamada:
- jsonKey: Objeto, clave en formato JSON
El formato de jsonKey admite los dos tipos siguientes, clave privada 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"
}
Clave pública CE:
1
2
3
4
5
6{
"kty": "EC",
"crv": "P-521",
"x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL",
"y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU"
}
función estática
recover
Recuperar clave pública a partir de firma recuperable, solo admite secp256k1
1
2static ECKey ECKey.recover(Buffer data,
Buffer sig) async;
Parámetros de llamada:
Resultados de devolución:
- ECKey, devuelve un objeto que contiene la clave pública
from
Cargar una clave en formato DER
1
2static PKey ECKey.from(Buffer DerKey,
String password = "");
Parámetros de llamada:
- DerKey:Buffer, clave en formato DER
- password: Cadena, contraseña de descifrado
Resultados de devolución:
- PKey, devuelve un objeto que contiene la clave
Cargar una clave en formato PEM
1
2static PKey ECKey.from(String pemKey,
String password = "");
Parámetros de llamada:
- pemKey: Cadena, clave en formato PEM
- password: Cadena, contraseña de descifrado
Resultados de devolución:
- PKey, devuelve un objeto que contiene la clave
Cargar una clave en formato JSON
1static PKey ECKey.from(Object jsonKey);
Parámetros de llamada:
- jsonKey: Objeto, clave en formato JSON
Resultados de devolución:
- PKey, devuelve un objeto que contiene la clave
El formato de jsonKey admite los siguientes cuatro tipos de claves privadas RSA:
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=="
}
Clave pública RSA:
1
2
3
4
5{
"kty": "RSA",
"n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=",
"e": "AQAB"
}
Clave privada 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"
}
Clave pública CE:
1
2
3
4
5
6{
"kty": "EC",
"crv": "P-521",
"x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL",
"y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU"
}
propiedades de miembros
curve
Cadena, devuelve el nombre de la curva elíptica del algoritmo actual
1readonly String ECKey.curve;
name
Cadena, devuelve el nombre del algoritmo actual
1readonly String ECKey.name;
keySize
Entero, devuelve la longitud de la contraseña del algoritmo actual en bits
1readonly Integer ECKey.keySize;
alg
Cadena, devuelve y establece el algoritmo de firma del objeto actual.
1readonly String ECKey.alg;
publicKey
PKey, devuelve la clave pública de la clave actual
1readonly PKey ECKey.publicKey;
Resultados de devolución:
- la clave pública de la clave actual
función miembro
computeSecret
Calcule la clave compartida de la curva elíptica Diffie-Hellman (ECDH) utilizando el algoritmo actual
1Buffer ECKey.computeSecret(ECKey publicKey) async;
Parámetros de llamada:
- publicKey: ECKey, especifica la clave pública de la otra parte
Resultados de devolución:
- Buffer, devuelve la clave secreta compartida calculada
isPrivate
Consultar si la clave actual es una clave privada
1Boolean ECKey.isPrivate();
Resultados de devolución:
- Boolean, es Verdadero y representa la clave privada
clone
copiar la clave actual
1PKey ECKey.clone();
Resultados de devolución:
- PKey, el objeto de copia de la clave actual
pem
Devuelve la codificación en formato PEM de la clave actual.
1String ECKey.pem();
Resultados de devolución:
- String, Codificación en formato PEM de la clave actual.
der
Devuelve la codificación en formato DER de la clave actual.
1Buffer ECKey.der();
Resultados de devolución:
- Buffer, la codificación en formato DER de la clave actual
json
Devuelve la codificación en formato jwt de la clave actual.
1Object ECKey.json(Object opts = {});
Parámetros de llamada:
- opts: Objeto, especificar opciones de exportación
Resultados de devolución:
- Object, la codificación en formato jwt de la clave actual
opts admite los siguientes parámetros:
1
2
3{
compress: false // specify whether to output public key in compressed form
}
Las curvas que soportan la compresión son: secp192r1, secp192k1, secp256r1, secp256k1, BrainpoolP256r1, secp384r1, BrainpoolP384r1, BrainpoolP512r1, secp521r1, sm2.
equals
Compare dos claves públicas/privadas para ver si son iguales
1Boolean ECKey.equals(object key);
Parámetros de llamada:
- key:object, especifique la clave pública/privada de la otra parte
Resultados de devolución:
- Boolean, si son iguales, devuelve verdadero
encrypt
Cifrar datos utilizando la clave pública de cifrado del algoritmo actual
1Buffer ECKey.encrypt(Buffer data) async;
Parámetros de llamada:
- data:Buffer, especifique los datos que se cifrarán
Resultados de devolución:
- Buffer, devuelve los datos cifrados
decrypt
Descifrar datos utilizando la clave privada de contraseña del algoritmo actual
1Buffer ECKey.decrypt(Buffer data) async;
Parámetros de llamada:
- data:Buffer, especifique los datos a descifrar
Resultados de devolución:
- Buffer, devuelve los datos descifrados
sign
Firmar datos utilizando la clave privada criptográfica del algoritmo actual
1
2Buffer ECKey.sign(Buffer data,
Object opts = {}) async;
Parámetros de llamada:
- data:Buffer, Especifique los datos que se van a firmar. Cuando el algoritmo es RSA, el parámetro de entrada debe ejecutarse con el algoritmo especificado por alg.hash
- opts: Objeto, especificar opciones de firma
Resultados de devolución:
- Buffer, devolver los datos firmados
opts admite los siguientes parámetros:
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
Verificar datos utilizando la clave pública criptográfica del algoritmo actual
1
2
3Boolean ECKey.verify(Buffer data,
Buffer sign,
Object opts = {}) async;
Parámetros de llamada:
- data:Buffer, especifique los datos a verificar
- sign:Buffer, especifique la firma a verificar
- opts: Objeto, especificar opciones de verificación
Resultados de devolución:
- Boolean, devuelve el resultado verificado
opts admite los siguientes parámetros:
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
Devuelve la representación de cadena del objeto. Generalmente, se devuelve "[Objeto nativo]". El objeto se puede volver a implementar de acuerdo con sus propias características.
1String ECKey.toString();
Resultados de devolución:
- String, devuelve la representación de cadena del objeto
toJSON
Devuelve una representación en formato JSON del objeto, que generalmente devuelve una colección de propiedades legibles definidas por el objeto.
1Value ECKey.toJSON(String key = "");
Parámetros de llamada:
- key: Cadena, no utilizada
Resultados de devolución:
- Value, devuelve un valor que contiene JSON serializable