menu

Category: Nodejs

Updated Posted by blacksecured in Cryptography on .

En este primer articulo se le mostrara como encriptar cadenas de texto usando el algoritmo aes-256-ctr de la librería crypto de nodeJS y la librería OpenSSL de PHP.

 

En el siguiente enlace se encuentra la documentación oficial de la librería crypto de nodeJS.

https://nodejs.org/api/crypto.html#cryptocreatecipherivalgorithm-key-iv-options

https://nodejs.org/api/crypto.html#cryptocreatedecipherivalgorithm-key-iv-options

/* crypto.js */

const crypto = require("crypto");

const algorithm = "aes-256-ctr";
const secretKey = "96c8f9d8d51c410532a781cfb37a73ab";
const iv = "d0229568bbc258c6";

const encrypt = (text) => {
const cipher = crypto.createCipheriv(algorithm, secretKey, iv);
const encrypted = Buffer.concat([cipher.update(text), cipher.final()]);
return encrypted.toString("hex");
};

const decrypt = (hash) => {
const decipher = crypto.createDecipheriv(algorithm, secretKey, iv);
const decrpyted = Buffer.concat([decipher.update(Buffer.from(hash, "hex")), decipher.final()]);
return decrpyted.toString();
};

module.exports = {
encrypt,
decrypt,
};

Implementación:

/* run.js */

const { encrypt, decrypt } = require("./crypto");

const cadena = "Soy un texto";

const encriptado = encrypt(cadena);
console.log(`Cadena Encriptado: => ${encriptado}`);

const desencriptado = decrypt(encriptado);
console.log(`Cadena Desencriptado: => ${desencriptado}`);

Salida:

Cadena Encriptado: => 684cc5e0d1956c4c470e9986
Cadena Desencriptado: => Soy un texto
Uso de la librería OpenSSL para encriptar texto con el algoritmo aes-256-ctr:

en el siguiente enlace se encuentra la documentación de OpenSSL para PHP.

https://www.php.net/manual/en/ref.openssl.php

<?php
$texto = 'Soy un texto';
$algorithm = 'aes-256-ctr';
$key = '96c8f9d8d51c410532a781cfb37a73ab';
$iv = 'd0229568bbc258c6';

$encrypted_data = bin2hex(openssl_encrypt($texto, $algorithm, $key, OPENSSL_RAW_DATA, $iv));
echo "Encrypted: ".$encrypted_data."\n";

$decrypted_data = openssl_decrypt(hex2bin($encrypted_data), $algorithm, $key, OPENSSL_RAW_DATA, $iv);
echo "Decrypted: ".$decrypted_data."\n";

$decrypted_data = openssl_decrypt(pack('H*', $encrypted_data), $algorithm, $key, OPENSSL_RAW_DATA, $iv);
echo "Decrypted: ".$decrypted_data."\n";

?>

Salida:

Encrypted: 684cc5e0d1956c4c470e9986
Decrypted: Soy un texto
Decrypted: Soy un texto

De este modo se puede enviar y recibir datos entre ambos lenguajes de forma segura, siempre y cuando el ( algoritmo – key – iv ) sean iguales en ambos lenguajes.

Happy Coding!