如何使用NodeJS加密程序包从PHP解密加密的数据

时间:2018-10-30 14:07:40

标签: php node.js encryption cryptojs

我使用openssl_encrypt()作为算法,使用aes-256-cbc在PHP中创建了一个加密函数。我希望在API调用中发送时,在NodeJS中对加密的数据进行解密。

这是我的PHP中的加密:

$form_data_str = json_encode($form_data);

  // Encrypt data to submit
  define('AES_256_CBC', 'aes-256-cbc');
  // Encryption Key from Merchant sKey
  $sKey = 'uTEW2U0s90mtzF5nGX2BBKkuYcUsQEEK';
  $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length(AES_256_CBC));
  $encrypted_form_data = openssl_encrypt($form_data_str, AES_256_CBC, $encryption_key, 0, $iv);

然后,我将加密数据作为主体通过API调用传递给我的NodeJS服务器。 现在,我想解密NodeJS中的数据。我的NodeJS中有以下当前代码:

var encrypter = require('crypto'),
algorithm = 'aes-256-cbc',
password = 'uTEW2U0s90mtzF5nGX2BBKkuYcUsQEEK';

function decrypt(data){
    let iv = new Buffer.alloc(16);
    var decipher = encrypter.createDecipheriv(algorithm,password,iv)
    var decrypted = decipher.update(data,'hex','utf8')
    decrypted += decipher.final('utf8');
    return decrypted;
}

var decrypted = decrypt('encrypted data from request body');
console.log(decrypted)

console中,我遇到此错误:

crypto.js:183


 var ret = this._handle.final();
                         ^

Error: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length at Decipheriv.final (crypto.js:183:26)

在NodeJS的decrypt函数中正确的方法应该是什么?

0 个答案:

没有答案