El método crypto.publicDecrypt() se usa para descifrar el contenido del búfer con la clave que se encriptó previamente usando la clave privada correspondiente, es decir, el método crypto.privateEncrypt(). Sintaxis:
crypto.publicDecrypt( key, buffer )
Parámetros: Este método acepta dos parámetros como se mencionó anteriormente y se describe a continuación:
- key: Es de tipo Object, string, Buffer o KeyObject y contiene dos parámetros que son los siguientes:
- frase de contraseña: es opcional para la clave privada y es de tipo string o búfer.
- padding: es un valor de relleno opcional que se define en crypto.constants, que puede ser crypto.constants.RSA_NO_PADDING o crypto.constants.RSA_PKCS1_PADDING. Es de tipo crypto.constants .
- buffer Es de tipo Buffer, TypedArray o DataView .
Tipo de retorno: Devuelve un nuevo Buffer con el contenido descifrado. Los siguientes ejemplos ilustran el uso del método crypto.publicDecrypt() en Node.js: Ejemplo 1:
javascript
// Node.js program to demonstrate the // crypto.publicDecrypt() method // Including crypto, path, and fs module var crypto = require('crypto'); var fs = require('fs'); const path = require('path'); // Generating key files function generateKeyFiles() { const keyPair = crypto.generateKeyPairSync('rsa', { modulusLength: 520, publicKeyEncoding: { type: 'spki', format: 'pem' }, privateKeyEncoding: { type: 'pkcs8', format: 'pem', cipher: 'aes-256-cbc', passphrase: '' } }); // Creating public and private key file fs.writeFileSync("public_key", keyPair.publicKey); fs.writeFileSync("private_key", keyPair.privateKey); } // Generate keys generateKeyFiles(); // Reading private key file var PRIVKEY = fs.readFileSync(path.join(__dirname, 'private_key'), 'utf8'); // Reading public key file var PUBKEY = fs.readFileSync(path.join(__dirname, 'public_key'), 'utf8'); // Defining my msg myMSG = "GeeksforGeeks!"; console.log("Original msg is : "+myMSG); // RSA PRIVATE ENCRYPT -> PUBLIC DECRYPT function privENC_pubDEC(originMSG){ // Encrypting msg with privateEncrypt method encmsg = crypto.privateEncrypt(PRIVKEY, Buffer.from(originMSG, 'utf8') ) .toString('base64'); // Decrypting msg with publicDecrypt method msg = crypto.publicDecrypt(PUBKEY, Buffer.from(encmsg, 'base64')); console.log(); // Prints encrypted msg console.log("Encrypted with private key: " + encmsg); console.log(); // Prints decrypted msg console.log("Decrypted with public key: " + msg.toString()); } // Calling privENC_pubDEC() method privENC_pubDEC(myMSG);
Producción:
Original msg is : GeeksforGeeks! Encrypted with private key: knwqke0ZrpJj1sLtL978OyqBMnJUEAEgTy1qJbyEnJyWbjoQ6hO7f 2FPnVhJnZwpZlxLbFQZCV1GMmr6WWJenFo= Decrypted with public key: GeeksforGeeks!
Ejemplo 2:
javascript
// Node.js program to demonstrate the // crypto.publicDecrypt() method // Including the fs and crypto modules var crypto = require('crypto'); var fs = require('fs'); // Reading the Private Key privK = fs.readFileSync('priv.key').toString(); // Passing the text to be encrypted // using private key var buf = Buffer.from('rishabh', 'utf8'); // Encrypting the text secretData = crypto.privateEncrypt(privK, buf); // Printing the encrypted text console.log(secretData); // Reading the Public key pubK = fs.readFileSync('pub.key').toString(); // Decrypting the text using public key origData = crypto.publicDecrypt(pubK, secretData); // Printing the original content console.log(origData);
Producción:
// Buffer 27 62 a1 2a 53 8d 0d 52 c7 3f e8 cc 89 42 c6 3e 8e 60 cd d3 57 06 d4 c9 1e 31 ba e6 23 8b 2c 10 be c1 fc ed 53 a4 9f f9 e0 5b da 74 d7 c2ca d0 98 f4 ... // Buffer 72 69 73 68 61 62 68
Referencia: https://nodejs.org/api/crypto.html#crypto_crypto_publicdecrypt_key_buffer
Publicación traducida automáticamente
Artículo escrito por nidhi1352singh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA