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.
<?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!