Módulo módulo básico

módulocripto

cryptoEl módulo es fibjsun módulo de algoritmo de cifrado incorporado. Proporciona cifrado simétrico, cifrado asimétrico, algoritmo de resumen, generador de números aleatorios criptográficos y otras funciones. Antes de su uso, require('crypto')el módulo debe cargarse mediante .

En cryptoel módulo hay muchos objetos disponibles, como por ejemplo:

  • PKey: Objeto de algoritmo de cifrado asimétrico
  • X509Cert: Objeto utilizado para manipular certificados X.509
  • Cipher: Objeto utilizado para implementar cifrado simétrico
  • Digest: Objeto utilizado para implementar el algoritmo de resumen.

Antes de utilizar el algoritmo de cifrado, debe crear un objeto clave. Por ejemplo, el siguiente AESejemplo crea un objeto clave:

1 2
const crypto = require('crypto'); const key = crypto.randomBytes(16); // generate a 16-byte random key

A continuación, utilice Cipherel objeto para cifrar el texto sin formato:

1 2 3 4
const c = new crypto.Cipher(crypto.AES, crypto.ECB, key); const data = 'hello, world'; const encrypted = c.encrypt(data).hex(); console.log(encrypted); // output encrypted data

En el ejemplo anterior, se crea un objeto AEScifrado , el texto sin formato se cifra utilizando el método y se devuelve el resultado del cifrado.Cipherencrypt

Además de los algoritmos de cifrado simétrico, cryptoel módulo también puede admitir algoritmos de cifrado asimétrico y algoritmos de resumen. Por ejemplo, el siguiente ejemplo es código que utiliza PKeyy Digestobjetos para implementar el cifrado SHA256:

1 2 3 4 5 6
const privateKey = crypto.loadPKey('private.pem'); // read private key from file const data = 'hello, world'; const digest = new crypto.Digest(hash.SHA256); digest.update(data); const signature = privateKey.sign(digest.digest()); console.log(signature); // output signature

En el ejemplo anterior, primero se lee un archivo de clave privada y se preparan los datos de entrada. Luego, Digestse crea un objeto SHA256 y updatelos datos se agregan al cálculo Hash utilizando el método. Una vez completado el cálculo, utilice privateKey.signel método para firmar y generar el resultado de la firma.

En resumen, cryptoel módulo proporciona una variedad de algoritmos de cifrado, algoritmos de resumen y objetos relacionados, que pueden ayudarnos a lograr diversos requisitos de seguridad, como cifrado simétrico y asimétrico, firmas digitales y verificación de cifrado.

objeto

Cipher

CipherConstructor, verCipher

1
Cipher crypto.Cipher;

PKey

PKeyConstructor, verPKey

1
PKey crypto.PKey;

ECKey

ECKeyConstructor, verECKey

1
ECKey crypto.ECKey;

BlsKey

BlsKeyConstructor, verBlsKey

1
BlsKey crypto.BlsKey;

X509Cert

X509CertConstructor, verX509Cert

1
X509Cert crypto.X509Cert;

X509Crl

X509CrlConstructor, verX509Crl

1
X509Crl crypto.X509Crl;

X509Req

X509ReqConstructor, verX509Req

1
X509Req crypto.X509Req;

función estática

createHash

Crea un objeto de resumen de información basado en el nombre del algoritmo dado.

1
static Digest crypto.createHash(String algo);

Parámetros de llamada:

  • algo: Cadena, que especifica el algoritmo del objeto de resumen de información.

Resultados de devolución:

  • Digest, devuelve el objeto de resumen de información

createHmac

Crea un objeto de resumen de información de hmac basado en el nombre del algoritmo dado

1 2
static Digest crypto.createHmac(String algo, Buffer key);

Parámetros de llamada:

  • algo: Cadena, que especifica el algoritmo del objeto de resumen de información.
  • key:Buffer, clave de firma binaria

Resultados de devolución:

  • Digest, devuelve el objeto de resumen de información

loadCert

Cargue un certificado en formato CRT/PEM/DER, que se puede llamar varias veces

1
static X509Cert crypto.loadCert(String filename);

Parámetros de llamada:

  • filename: Cadena, nombre del archivo del certificado

Resultados de devolución:

  • X509Cert, devuelve un objeto que contiene el certificado

loadCrl

Cargue un certificado de revocación en formato PEM/DER, que se puede llamar varias veces

1
static X509Crl crypto.loadCrl(String filename);

Parámetros de llamada:

  • filename: Cadena, nombre del archivo del certificado de revocación

Resultados de devolución:

  • X509Crl, devuelve un objeto que contiene el certificado revocado

loadReq

Cargue una solicitud de certificado en formato PEM/DER, que se puede llamar varias veces

1
static X509Req crypto.loadReq(String filename);

Parámetros de llamada:

  • filename: Cadena, nombre del archivo de solicitud de certificado

Resultados de devolución:

  • X509Req, devuelve un objeto que contiene el certificado solicitado

loadPKey

Cargue una clave pública o privada asimétrica en formato CRT/PEM/DER

1
static PKey crypto.loadPKey(String filename);

Parámetros de llamada:

  • filename: Cadena, nombre de archivo de clave pública o clave privada

Resultados de devolución:

  • PKey, la devolución contienePKeyObjeto

randomBytes

Genere números aleatorios de tamaño específico usando el generador havege

1
static Buffer crypto.randomBytes(Integer size = 16) async;

Parámetros de llamada:

  • size: Entero, especifica el tamaño del número aleatorio generado

Resultados de devolución:

  • Buffer, devuelve el número aleatorio generado

simpleRandomBytes

Genere números aleatorios de baja intensidad de un tamaño específico, utilizando un algoritmo rápido

1
static Buffer crypto.simpleRandomBytes(Integer size = 16) async;

Parámetros de llamada:

  • size: Entero, especifica el tamaño del número aleatorio generado

Resultados de devolución:

  • Buffer, devuelve el número aleatorio generado

pseudoRandomBytes

Genere números pseudoaleatorios de tamaño específico, utilizando el generador de entropía

1
static Buffer crypto.pseudoRandomBytes(Integer size = 16) async;

Parámetros de llamada:

  • size: Entero, especifica el tamaño del número aleatorio generado

Resultados de devolución:

  • Buffer, devuelve el número aleatorio generado

randomFill

Utilice números aleatorios para completar lo especificado.Buffer, usando el generador havege

1 2 3
static Buffer crypto.randomFill(Buffer buffer, Integer offset = 0, Integer size = -1) async;

Parámetros de llamada:

  • buffer:Buffer, especifique el generadoBuffer
  • offset: Entero, especifica el desplazamiento inicial, el valor predeterminado es 0
  • size: Entero, especifica el tamaño del número aleatorio generado, el valor predeterminado es buffer.length - offset

Resultados de devolución:

  • Buffer, devuelve el número aleatorio generado

randomArt

Genera una imagen de carácter visual de los datos dados.

1 2 3
static String crypto.randomArt(Buffer data, String title, Integer size = 8);

Parámetros de llamada:

  • data:Buffer, especifique los datos que se mostrarán
  • title: Cadena, especifica el título de la imagen del personaje. Los caracteres de varios bytes provocarán errores de ancho.
  • size: Entero, tamaño de imagen de carácter

Resultados de devolución:

  • String, devuelve la imagen de cadena visual generada

generateKey

Generar una clave privada RSA

1
static PKey crypto.generateKey(Integer size) async;

Parámetros de llamada:

  • size: Entero, especifica la longitud de la clave RSA, en bits

Resultados de devolución:

  • PKey, devuelve un objeto que contiene la clave privada generada

Generar una clave privada de curva elíptica

1
static PKey crypto.generateKey(String curve = "secp521r1") async;

Parámetros de llamada:

  • curve: Cadena, especifica la curva elíptica preestablecida, el valor predeterminado es 'secp256r1'

Resultados de devolución:

  • PKey, devuelve un objeto que contiene la clave privada generada

curva Las curvas opcionales incluyen curvas NIST y alias de la siguiente manera:

curva Alias
NIST P-192 'NIST P-192', 'p192', 'P-192', 'prime192v1', 'secp192r1'
NIST P-224 'NIST P-224', 'p224', 'P-224', 'prime224v1', 'secp224r1'
NIST P-256 'NIST P-256', 'p256', 'P-256', 'prime256v1', 'secp256r1'
NIST P-384 'NIST P-384', 'p384', 'P-384', 'prime384v1', 'secp384r1'
NIST P-521 'NIST P-521', 'p521', 'P-521', 'prime521v1', 'secp521r1'

Otras curvas admitidas incluyen: "brainpoolP512r1", "brainpoolP384r1", "secp256k1", "P-256K", "brainpoolP256r1", "sm2p256r1", "SM2", "Ed25519", "BLS12381_G1", "BLS12381_G2"


pbkdf1

Genere la clave binaria requerida basada en la contraseña de texto sin formato basada en pbkdf1

1 2 3 4 5
static Buffer crypto.pbkdf1(Buffer password, Buffer salt, Integer iterations, Integer size, Integer algo) async;

Parámetros de llamada:

  • password:Buffer, especifique la contraseña a utilizar
  • salt:Buffer, especifique la sal utilizada por hmac
  • iterations: Entero, especifica el número de iteraciones.
  • size: Entero, especifique el tamaño de la clave
  • algo: Entero, especifique elhashalgoritmo, verhashmódulo

Resultados de devolución:

  • Buffer, devuelve la clave binaria generada

Genere la clave binaria requerida basada en la contraseña de texto sin formato basada en pbkdf1

1 2 3 4 5
static Buffer crypto.pbkdf1(Buffer password, Buffer salt, Integer iterations, Integer size, String algoName) async;

Parámetros de llamada:

  • password:Buffer, especifique la contraseña a utilizar
  • salt:Buffer, especifique la sal utilizada por hmac
  • iterations: Entero, especifica el número de iteraciones.
  • size: Entero, especifique el tamaño de la clave
  • algoName: Cadena, especifica elhashalgoritmo, verhashmódulo

Resultados de devolución:

  • Buffer, devuelve la clave binaria generada

pbkdf2

Genere la clave binaria requerida basada en la contraseña de texto sin formato según rfc2898

1 2 3 4 5
static Buffer crypto.pbkdf2(Buffer password, Buffer salt, Integer iterations, Integer size, Integer algo) async;

Parámetros de llamada:

  • password:Buffer, especifique la contraseña a utilizar
  • salt:Buffer, especifique la sal utilizada por hmac
  • iterations: Entero, especifica el número de iteraciones.
  • size: Entero, especifique el tamaño de la clave
  • algo: Entero, especifique elhashalgoritmo, verhashmódulo

Resultados de devolución:

  • Buffer, devuelve la clave binaria generada

Genere la clave binaria requerida basada en la contraseña de texto sin formato según rfc2898

1 2 3 4 5
static Buffer crypto.pbkdf2(Buffer password, Buffer salt, Integer iterations, Integer size, String algoName) async;

Parámetros de llamada:

  • password:Buffer, especifique la contraseña a utilizar
  • salt:Buffer, especifique la sal utilizada por hmac
  • iterations: Entero, especifica el número de iteraciones.
  • size: Entero, especifique el tamaño de la clave
  • algoName: Cadena, especifica elhashalgoritmo, verhashmódulo

Resultados de devolución:

  • Buffer, devuelve la clave binaria generada

getHashes

Obtenga soporte para el módulo criptográficohash(Resumen) Algoritmos, como 'md5', 'sha224'

1
static Array crypto.getHashes();

Resultados de devolución:

  • Array, devuelve fibjs compatibleshashmatriz de algoritmos

constante

AES

Especifique el algoritmo de cifrado simétrico AES, admite claves de 128, 192 y 256 bits, el modo de trabajo de cifrado en bloque admite ECB, CBC, CFB128, CTR, GCM, CCM, XTS

1
const crypto.AES = 1;

DES

Especifica el algoritmo de cifrado simétrico DES, admite claves de 64 bits y el modo de trabajo de cifrado en bloque admite ECB, CBC

1
const crypto.DES = 2;

DES_EDE3

Especifique el algoritmo de cifrado simétrico DES-EDE3, admite clave de 192 bits, el modo de trabajo de cifrado en bloque admite ECB, CBC

1
const crypto.DES_EDE3 = 3;

CAMELLIA

Especifique el algoritmo de cifrado simétrico CAMELLIA, admite claves de 128, 192 y 256 bits, el modo de trabajo de cifrado en bloque admite ECB, CBC, CFB128, CTR, GCM, CCM

1
const crypto.CAMELLIA = 4;

ARIA

Especifique el algoritmo de cifrado simétrico ARIA, admite claves de 128, 192 y 256 bits, el modo de trabajo de cifrado en bloque admite ECB, CBC, CFB128, CTR, GCM, CCM

1
const crypto.ARIA = 5;

CHACHA20

Especifique el algoritmo de cifrado simétrico CHACHA20, admita clave de 256 bits y el modo de trabajo de cifrado en bloque admita POLY1305.

1
const crypto.CHACHA20 = 6;

SM4

Especifique el algoritmo de cifrado simétrico SM4, el modo de trabajo de cifrado en bloque admite ECB, CBC

1
const crypto.SM4 = 7;

ECB

Especifique el modo de trabajo de cifrado en bloque para admitir el BCE

1
const crypto.ECB = 1;

CBC

Especifique el modo de trabajo de cifrado en bloque para admitir CBC

1
const crypto.CBC = 2;

CFB64

Especifique el modo de trabajo del cifrado de bloques para admitir CFB64

1
const crypto.CFB64 = 3;

CFB128

Especifique el modo de trabajo de cifrado de bloques para admitir CFB128

1
const crypto.CFB128 = 4;

OFB

Especifique el modo de trabajo de cifrado en bloque para admitir OFB

1
const crypto.OFB = 5;

CTR

Especifique el modo de trabajo de cifrado en bloque para admitir CTR

1
const crypto.CTR = 6;

GCM

Especifique el modo de trabajo del cifrado de bloques para admitir GCM

1
const crypto.GCM = 7;

STREAM

Especificar el modo de cifrado de flujo

1
const crypto.STREAM = 8;

CCM

Especifique el modo de trabajo de cifrado en bloque para admitir CCM

1
const crypto.CCM = 9;

XTS

Especifique el modo de trabajo de cifrado de bloques para admitir XTS

1
const crypto.XTS = 10;

POLY1305

Especifique el modo de trabajo del cifrado de bloques para admitir POLY1305

1
const crypto.POLY1305 = 11;

PKCS7

Especifique el modo de relleno como PKCS7

1
const crypto.PKCS7 = 0;

ONE_AND_ZEROS

Especifique el modo de relleno como ONE_AND_ZEROS

1
const crypto.ONE_AND_ZEROS = 1;

ZEROS_AND_LEN

Especifique el modo de relleno como ZEROS_AND_LEN

1
const crypto.ZEROS_AND_LEN = 2;

ZEROS

Especificar el modo de llenado como CERO

1
const crypto.ZEROS = 3;

NOPADDING

Especifique el modo de relleno como NOPADDING

1
const crypto.NOPADDING = 4;