node.js public-key-encryption encryption-asymmetric

Cifrado de datos con clave pública en node.js



public-key-encryption encryption-asymmetric (5)

¿Qué tal este nodo-rsa módulo ? Aquí hay un enlace al archivo test.js que demuestra el uso .

Necesito cifrar una cadena usando una clave pública (archivo pem) y luego firmarla usando una clave privada (también una pem)

Estoy cargando los archivos pem bien:

publicCert = fs.readFileSync(publicCertFile).toString();

pero después de horas de buscar en Google, parece que no puedo encontrar una manera de cifrar los datos usando la clave pública. En php simplemente llamo openssl_public_encrypt, pero no veo ninguna función correspondiente en el nodo o en ningún módulo.

Si alguien tiene alguna sugerencia, haganmelo saber.


El módulo de cifrado y descifrado público / privado actualizado es URSA. El módulo node-rsa está desactualizado.

Este módulo de Nodo proporciona un conjunto bastante completo de envoltorios para la funcionalidad criptográfica de clave pública / privada RSA de OpenSSL.

npm instalar ursa

Ver: https://github.com/Obvious/ursa



No hace falta biblioteca, amigos.

Entrar crypto

Aquí hay un pequeño módulo que podría usar para cifrar / descifrar cadenas con claves RSA:

var crypto = require("crypto"); var path = require("path"); var fs = require("fs"); var encryptStringWithRsaPublicKey = function(toEncrypt, relativeOrAbsolutePathToPublicKey) { var absolutePath = path.resolve(relativeOrAbsolutePathToPublicKey); var publicKey = fs.readFileSync(absolutePath, "utf8"); var buffer = new Buffer(toEncrypt); var encrypted = crypto.publicEncrypt(publicKey, buffer); return encrypted.toString("base64"); }; var decryptStringWithRsaPrivateKey = function(toDecrypt, relativeOrAbsolutePathtoPrivateKey) { var absolutePath = path.resolve(relativeOrAbsolutePathtoPrivateKey); var privateKey = fs.readFileSync(absolutePath, "utf8"); var buffer = new Buffer(toDecrypt, "base64"); var decrypted = crypto.privateDecrypt(privateKey, buffer); return decrypted.toString("utf8"); }; module.exports = { encryptStringWithRsaPublicKey: encryptStringWithRsaPublicKey, decryptStringWithRsaPrivateKey: decryptStringWithRsaPrivateKey }

Recomendaría no utilizar métodos fs síncronos siempre que sea posible, y podría usar Promesas para mejorar esto, pero para casos de uso simples, este es el enfoque que he visto y que tomaría.


TL; DR: Ursa es tu mejor apuesta. Es realmente funky que esto no sea estándar con el nodo criptográfico.

Todas las demás soluciones que encontré no funcionan en Windows o no son en realidad bibliotecas de cifrado. Ursa, recomendada por Louie, parece la mejor apuesta. Si no te importan las ventanas, eres aún más dorado. Nota sobre Ursa, tuve que instalar Open SSL junto con algo llamado "Visual C ++ 2008 Redistributables" para que la instalación de npm funcionara. Obtenga esa basura aquí: http://slproweb.com/products/Win32OpenSSL.html

El desglose:

Esto es, literalmente, todo lo que pude encontrar.