Cifrado de objetos
Objeto de algoritmo de cifrado simétrico
El objeto cifrado pertenece acryptomódulo, crear:
1var c = new crypto.Cipher(crypto.AES, crypto.ECB, ...);
A continuación se toma AES como ejemplo para demostrar cómo utilizar objetos Cipher para cifrar y descifrar:
Primero, necesitamos obtener un objeto Cipher cifrado simétricamente, como el algoritmo de cifrado AES:
1
2
3const crypto = require('crypto');
const key = crypto.randomBytes(16); // generate a 16-byte random key
const cipher = new crypto.Cipher(crypto.AES, crypto.ECB, key);
En el código anterior, randomBytes
generamos un número aleatorio de 16 bytes como clave AES a través del método. Luego, creamos un objeto Cipher del algoritmo AES, usando el modo de trabajo de cifrado en bloque ECB y usando el número aleatorio generado como clave.
A continuación, encrypt
ciframos el texto sin formato utilizando el método del objeto Cipher:
1
2
3const plaintext = 'Hello, world!';
const encrypted = cipher.encrypt(plaintext);
console.log(encrypted); // output encrypted data
En el código anterior, utilizamos encrypt
el método para cifrar la cadena Hello, world!
y generar el resultado cifrado.
Con respecto al código anterior, debe prestar atención a los siguientes puntos:
- Antes de realizar el cifrado, debe crear un objeto Cipher cifrado simétricamente y establecer parámetros como el algoritmo de cifrado, la contraseña y el modo de trabajo del cifrado en bloque.
- Después de llamar al método de cifrado, podemos obtener los datos cifrados, que generalmente son unBufferobjeto. Cabe señalar que la salida son datos binarios, que deben imprimirse con el método correspondiente, como usar,
Hex
etc., para la conversión.
Si queremos descifrar los datos, también necesitamos un objeto Cipher, que también se basa en el algoritmo AES y utiliza la misma clave y modo de trabajo de cifrado en bloque:
1
2
3const decipher = new crypto.Cipher(crypto.AES, crypto.ECB, key);
const decrypted = decipher.decrypt(encrypted);
console.log(decrypted.toString()); // output decrypted data
Aquí, creamos un nuevo objeto Cipher, usamos el mismo modo de trabajo de clave y contraseña y usamos decrypt
el método para descifrar los datos cifrados. El resultado del descifrado es unBufferEl objeto debe convertirse en una cadena para que se genere correctamente.
relación de herencia
Constructor
Cipher
Constructor de cifrado, solo utilizado para la inicialización de ARC4
1
2new Cipher(Integer provider,
Buffer key);
Parámetros de llamada:
- provider: Entero, especifique el algoritmo de cifrado
- key:Buffer, especifique la contraseña de cifrado y descifrado
constructor de cifrado
1
2
3new Cipher(Integer provider,
Integer mode,
Buffer key);
Parámetros de llamada:
- provider: Entero, especifique el algoritmo de cifrado
- mode: Entero, especifica el modo de trabajo del cifrado en bloque.
- key:Buffer, especifique la contraseña de cifrado y descifrado
constructor de cifrado
1
2
3
4new Cipher(Integer provider,
Integer mode,
Buffer key,
Buffer iv);
Parámetros de llamada:
- provider: Entero, especifique el algoritmo de cifrado
- mode: Entero, especifica el modo de trabajo del cifrado en bloque.
- key:Buffer, especifique la contraseña de cifrado y descifrado
- iv:Buffer, especifica el vector inicial
propiedades de miembros
name
Cadena, devuelve el nombre del algoritmo actual
1readonly String Cipher.name;
keySize
Entero, devuelve la longitud de la contraseña del algoritmo actual en bits
1readonly Integer Cipher.keySize;
ivSize
Entero, devuelve la longitud del vector inicial del algoritmo actual, en bytes
1readonly Integer Cipher.ivSize;
blockSize
Entero, devuelve la longitud del bloque de datos del algoritmo actual en bytes
1readonly Integer Cipher.blockSize;
función miembro
paddingMode
Usar modo de relleno
1Cipher.paddingMode(Integer mode);
Parámetros de llamada:
- mode: Entero, especifica el modo de relleno, el valor predeterminado es PADDING_PKCS7
encrypt
Cifrar datos utilizando el algoritmo de cifrado actual
1Buffer Cipher.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 el algoritmo de cifrado actual
1Buffer Cipher.decrypt(Buffer data) async;
Parámetros de llamada:
- data:Buffer, especifique los datos a descifrar
Resultados de devolución:
- Buffer, devuelve los datos descifrados
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 Cipher.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 Cipher.toJSON(String key = "");
Parámetros de llamada:
- key: Cadena, no utilizada
Resultados de devolución:
- Value, devuelve un valor que contiene JSON serializable