I am trying to encrypt a piece of string in nodejs and need to decrypt that in front end javascript. In nodejs I was using the crypto library and in front end using web crypto. Facing some error while decrypting in the front end.
NodeJS
const crypto = require('crypto'); const iv = crypto.randomBytes(12); const algorithm = 'aes-256-gcm'; let password = 'passwordpasswordpasswordpassword'; let text = 'Hello World!'; let cipher = crypto.createCipheriv(algorithm, password, iv); let encrypted = cipher.update(text, 'utf8', 'hex'); encrypted += cipher.final('hex'); var tag = cipher.getAuthTag(); let cipherObj = { content: encrypted, tag: tag, iv: iv } Front End
let cipherObj; //GET FROM BE let aesKey = await crypto.subtle.importKey( "raw", Buffer.from('passwordpasswordpasswordpassword'), //password "AES-GCM", true, ["decrypt"] ); let decrypted = await window.crypto.subtle.decrypt( { name: "AES-GCM", iv: Buffer.from(cipherObj.iv), tagLength: 128 }, aesKey, Buffer.concat([Buffer.from(cipherObj.content), Buffer.from(cipherObj.tag)]) ); Decrypt function in the front-end is throwing an error.
ERROR Error: Uncaught (in promise): OperationError at resolvePromise (zone.js:814) at zone.js:724 at rejected (main.js:231) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:388) at Object.onInvoke (core.js:3820) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:387) at Zone.push../node_modules/zone.js/dist/zone.js.Zone.run (zone.js:138) at zone.js:872 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421) at Object.onInvokeTask (core.js:3811) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:420) at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:188) at drainMicroTaskQueue (zone.js:595) PS: I am using Angular 7 in front end