import * as crypto from "crypto-browserify"; export function encrypt(key, txt){ try{ const pubc = cert.pub(key) const buf = crypto.publicEncrypt({ key:pubc, padding:crypto.constants.RSA_PKCS1_PADDING, }, Buffer.from(txt,'utf-8')) return buf.toString('base64') } catch(e) { return '' } } export function decrypt(privateKey, enc){ try{ const privc = cert.priv(privateKey) const buf = crypto.privateDecrypt({ key:privc, padding:crypto.constants.RSA_PKCS1_PADDING, }, Buffer.from(enc,'base64')) return buf.toString('utf-8') } catch(e) { return '' } } export function genKeys(){ return new Promise((resolve, reject)=>{ crypto.generateKeyPair('rsa', { modulusLength: 2048 }, (err, publicKey, privKey)=>{ const pubPEM = publicKey.export({ type:'pkcs1',format:'pem' }) const pubBase64 = cert.unpub(pubPEM) const privPEM = privKey.export({ type:'pkcs1',format:'pem' }) const privBase64 = cert.unpriv(privPEM) resolve({ public: pubBase64, private: privBase64, }) }) }) } export function testRSA(){ crypto.generateKeyPair('rsa', { modulusLength: 2048 }, (err, publicKey, priv)=>{ const pubPEM = publicKey.export({ type:'pkcs1',format:'pem' }) const pub = cert.unpub(pubPEM) const msg = 'hi' const enc = encrypt(pub, msg) const dec = decrypt(priv, enc) console.log("FINAL:",dec) }) } const cert = { unpub: function(key){ let s = key s = s.replace('-----BEGIN RSA PUBLIC KEY-----','') s = s.replace('-----END RSA PUBLIC KEY-----','') return s.replace(/[\r\n]+/gm, '') }, unpriv: function(key){ let s = key s = s.replace('-----BEGIN RSA PRIVATE KEY-----','') s = s.replace('-----END RSA PRIVATE KEY-----','') return s.replace(/[\r\n]+/gm, '') }, pub:function(key){ return '-----BEGIN RSA PUBLIC KEY-----\n' + key + '\n' + '-----END RSA PUBLIC KEY-----' }, priv:function(key){ return '-----BEGIN RSA PRIVATE KEY-----\n' + key + '\n' + '-----END RSA PRIVATE KEY-----' } }