将PHP加密/解密端口移植到Node.js

时间:2019-02-23 00:12:20

标签: php node.js encryption openssl

我正在尝试将下面的代码移植到Node.js上,但是没有运气。

    $output = false;
        $key = hash( 'sha256', self::SECRET_KEY );
        $iv = substr( hash( 'sha256', self::SECRET_IV ), 0, 16 );


        if( $action == 'e' ) {
            $output = base64_encode( openssl_encrypt( $string, self::ENCRYPT_METHOD, $key, 0, $iv ) );
        }
        else if( $action == 'd' ){
            $output = openssl_decrypt( base64_decode( $string ), self::ENCRYPT_METHOD, $key, 0, $iv );
        }

        return $output;

这是我目前为止的去向,但要么是胡言乱语,要么是我遇到了几个错误之一。

    var crypto = require('crypto'),
      algorithm = ENCRYPT_METHOD,
      password = SECRET_IV;

    function encrypt(text){
      var cipher = crypto.createCipher(algorithm, sha256(SECRET_KEY), sha256(SECRET_IV).substring(0,16))
      let p = Buffer.from(text, 'utf8').toString('base64');
      var crypted = cipher.update(p,'utf8','base64');
      crypted += cipher.final('base64');
      return crypted;
    }

    function sha256(data) {
      return crypto.createHash("sha256").update(data).digest("hex");
    }

    function decrypt(text){
      var decipher = crypto.createDecipher(algorithm, sha256(SECRET_KEY), sha256(SECRET_IV).substring(0,16));
      decipher.setAutoPadding(false);
      var dec = decipher.update(text,'base64','utf-8');
      dec += decipher.final('utf8');
      return dec;
    }

我尝试使用base64进行解码/编码,但这也不起作用。将setAutoPaddding添加为false后,我开始取得一些进展。我在一个线程上发现,在Node上从一种语言进行编码/解码时,这是一个问题。

任何帮助将不胜感激。

0 个答案:

没有答案