How to use forge to decrypt rsa-cipher with given private key in javascript

3.5k Views Asked by At

I trie to encrypt text in php and decrypt with javscript using RSA. In php i use phpseclib. For the client-site i've tried forge by digitalbazaar.

According to the documentation, they create a private and a public key in one object and start the magic.

 /*** Generating 1024-bit key-pair */  
 keys = forge.pki.rsa.generateKeyPair(1024);  

 /*** public key encryption */    
 var ciphertext = keys.publicKey.encrypt("Secret");     

 /*** private key decryption */  
 var plaintext  = keys.privateKey.decrypt(ciphertext); 

Is there a method to use a given private key as a string to decrypt messages in forge?

1

There are 1 best solutions below

0
On

You can convert PKCS#8 PEM encoded private keys (i.e. key strings staring with -----BEGIN RSA PRIVATE KEY-----)

var pem = readPEMKey(...); // read the string
var privKey = forge.pki.privateKeyFromPem(pem);
var pubKey = forge.pki.rsa.setPublicKey(privKey.n, privKey.e);

/*** public key encryption */    
var ciphertext = pubKey.encrypt("Secret");     
/*** private key decryption */  
var plaintext  = pkey.decrypt(ciphertext); 

It is also possible (and a bit more complex) to create a private key from scratch with the key parameters:

var privKey = forge.pki.setPrivateKey(n, e, d, p, q, dP, dQ, qInv);

where :

  • n: key modulus
  • e: private exponent
  • p: the first modulus prime factor
  • q: the second modulus prime factor
  • d: public exponent
  • dP, dQ, qInv: the chinese remainder theorem parameters

All these params are supposed to be BigInteger created with the forge.util.createBuffer function.