Introducción

A continuación se presenta un ejemplo de código fuente sobre el cifrado de datos mediante el algoritmo RSA, requerido por algunos recursos como por ejemplo el cargo mediante tarjeta.

Node.js

const crypto = require("crypto")
const fs = require("fs");

/* Llave pública en forma PEM. */
const llave_cifrado = "-----BEGIN PUBLIC KEY-----\n" +
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq4sFwDj2MZeCmw\n" +
"QlQ9z2Sv1E9czdek7uOVKREAQM4+OsPa5HaU3NTJyoFYcRfh8L4mKUUiB\n" +
"uIjAkx6rzPV+xW/+ATJBN9cIKRnKGgkakIVJ1ko5nsxi0/nEWpFfaqdSpe\n" +
"l2f5Y3jtJvS1yxW8tnEhJE6+5dGdB/WG6KFFmd1lffPY0i9f80pKXN/qp9\n" +
"IUSZ60YX4Z40TGWxsr3qIPz7WV4otdjfDiyGtj3SKETvbTRfi8nttEDvwa\n" +
"Z6RmAPHYfaNrcWhl25c7wMvg9k0lJdsx/CNq/LmZFC7tNK4/8j8ZqBmI8p\n" +
"TPIpWlYpM9BNryBr50IlfP3NiFeKyIPDrdxXPRwIDAQAB\n" +
"-----END PUBLIC KEY-----";

/* Función que realiza el cifrado */
function cifrar(dato_cifrar)
{
//-- Convierte el dato a cifrar en un arreglo de bytes
dato_cifrar_buffer = Buffer.from(dato_cifrar, "utf8")
//-- Realiza el cifrado de los datos.
const dato_cifrado = crypto.publicEncrypt(
{
key: llave_cifrado,
padding: crypto.constants.RSA_PKCS1_PADDING
},
dato_cifrar_buffer
)

//-- Retorna el valor como base64
return dato_cifrado.toString("base64")
}

numero_tarjeta_cifrado = cifrar("4761739001010119")
monto_transaccion_cifrado = cifrar("1000")
cvv_cifrado = cifrar("999")
anio_expiracion_cifrado = cifrar("30")
mes_expiracion_cifrado = cifrar("01")
moneda_cifrado = cifrar("CRC")
detalle_cargo_cifrado = cifrar("POLIZA 0101AUT....")
correo_cifrado = cifrar("correo@dominio.com")

//-- Construye el mensaje para envío el API mediante HTTP
const mensaje = {
"numeroTarjeta": numero_tarjeta_cifrado,
"montoTransaccion": monto_transaccion_cifrado,
"cvv": cvv_cifrado,
"correoElectronico": correo_cifrado,
"detalleCargo": detalle_cargo_cifrado,
"mesExpiracion": mes_expiracion_cifrado,
"anioExpiracion": anio_expiracion_cifrado,
"moneda": moneda_cifrado
}

//-- Escribe el mensaje en un archivo de texto.
fs.writeFileSync('trama.json', JSON.stringify(mensaje));