ObjetoPKey
PKey está incorporadocryptoUn objeto proporcionado por el módulo que representa un par de claves: una clave pública y una clave privada. PKey admite generar claves, cargar claves, almacenar claves y administrar el proceso de cifrado en JS
El objeto PKey admite múltiples algoritmos de cifrado, como RSA, EC o Ed25519, etc. Cada algoritmo de cifrado tiene su propia forma única de generar y administrar claves. El objeto PKey también contiene atributos como el nombre del algoritmo al que pertenece la clave y la longitud de la clave.
Los siguientes son métodos comunes de PKey y sus ejemplos:
- generateKey (alg | bits): genera un par de claves, alg especifica el algoritmo de la clave, bits especifica la longitud de la clave y el valor predeterminado es 2048.
1
2
3var crypto = require('crypto');
var pkey = crypto.generateKey(2048);
- from (valor [, contraseña]): cargue la clave en formato DER o PEM en el objeto PKey.
1
2
3var crypto = require('crypto');
var pkey = crypto.PKey.from(fs.readFile('rsa.private.pem'));
- publicKey: obtiene la clave pública de la clave actual.
1
2
3
4var crypto = require('crypto');
var pkey = crypto.PKey.from(fs.readFile('rsa.private.pem'));
var pubkey = pkey.publicKey;
- igual (otro): determina si dos claves públicas y privadas son iguales.
1
2
3
4
5var crypto = require('crypto');
var pkey1 = crypto.PKey.from(fs.readFile('rsa.private.pem'));
var pkey2 = crypto.PKey.from(fs.readFile('rsa.public.pem'));
console.log(pkey1.equals(pkey2)); // output: true
relación de herencia
Constructor
PKey
Construya PKey a partir de una clave en formato DER
1
2new PKey(Buffer DerKey,
String password = "");
Parámetros de llamada:
- DerKey:Buffer, clave en formato DER
- password: Cadena, contraseña de descifrado
Construya PKey a partir de una clave en formato PEM
1
2new PKey(String pemKey,
String password = "");
Parámetros de llamada:
- pemKey: Cadena, clave en formato PEM
- password: Cadena, contraseña de descifrado
Construya PKey a partir de la clave en formato JSON
1new PKey(Object jsonKey);
Parámetros de llamada:
- jsonKey: Objeto, clave en formato JSON
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"
}
función estática
from
Cargar una clave en formato DER
1
2static PKey PKey.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 PKey.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 PKey.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
name
Cadena, devuelve el nombre del algoritmo actual
1readonly String PKey.name;
keySize
Entero, devuelve la longitud de la contraseña del algoritmo actual en bits
1readonly Integer PKey.keySize;
alg
Cadena, devuelve y establece el algoritmo de firma del objeto actual.
1readonly String PKey.alg;
publicKey
PKey, devuelve la clave pública de la clave actual
1readonly PKey PKey.publicKey;
Resultados de devolución:
- la clave pública de la clave actual
función miembro
isPrivate
Consultar si la clave actual es una clave privada
1Boolean PKey.isPrivate();
Resultados de devolución:
- Boolean, es Verdadero y representa la clave privada
clone
copiar la clave actual
1PKey PKey.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 PKey.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 PKey.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 PKey.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 PKey.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 PKey.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 PKey.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 PKey.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 PKey.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 PKey.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 PKey.toJSON(String key = "");
Parámetros de llamada:
- key: Cadena, no utilizada
Resultados de devolución:
- Value, devuelve un valor que contiene JSON serializable