在PHP 7中加密在Node JS中解密 [英] Encrypt in PHP 7 decrypt in Node JS

查看:82
本文介绍了在PHP 7中加密在Node JS中解密的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在PHP 5.6中,有许多基于 http://php.net/manual/zh-CN/function.mcrypt-decrypt.php

In PHP 5.6 there were plenty of solutions that worked perfectly that were based on http://php.net/manual/en/function.mcrypt-decrypt.php

例如

public function encrypt($data)
{
    //don't use default php padding which is '\0'
    $pad = $this->blocksize - (strlen($data) % $this->blocksize);
    $data = $data . str_repeat(chr($pad), $pad);
    return bin2hex(mcrypt_encrypt(MCRYPT_RIJNDAEL_128,
        $this->encryptKey,
        $data, MCRYPT_MODE_CBC, $this->iv));
}

但是PHP7的警告不鼓励使用此功能.

But PHP7 has a WARNING that discourages using this function.

此功能从PHP 7.1.0起已被弃用.强烈建议不要依赖此功能."

任何有关在两端使用关键字进行安全加密的想法; PHP + Node.js?

Any ideas for safe encryption using keywords on both ends; PHP + Node.js?

推荐答案

LibMcrypt在2007年被废弃.更多信息 https://wiki.php.net/rfc/mcrypt-viking-funeral

LibMcrypt was abandoned in 2007. More information https://wiki.php.net/rfc/mcrypt-viking-funeral

您必须使用openssl加密 http://php.net/manual /en/function.openssl-encrypt.php

You have to use openssl encrypt http://php.net/manual/en/function.openssl-encrypt.php

PHP

<?php
$textToEncrypt = "Secret Text to Encrypt";
$encryptionMethod = 'aes-256-cbc';
$secretHash = "315a5504d921f8327f73a356d2bbcbf1"; // <---- you have to use some persistent key.

$iv_size = openssl_cipher_iv_length($encryptionMethod);
$iv = openssl_random_pseudo_bytes($iv_size);

//To encrypt
$encryptedMessage = openssl_encrypt($textToEncrypt, $encryptionMethod, $secretHash, 0, $iv);

//Concatenate iv with data
$encryptedMessageWithIv = bin2hex($iv) . $encryptedMessage;

//To Decrypt
$iv_size = openssl_cipher_iv_length($encryptionMethod);
$iv = hex2bin(substr($encryptedMessageWithIv, 0, $iv_size * 2));

$decryptedMessage = openssl_decrypt(substr($encryptedMessageWithIv, $iv_size * 2), $encryptionMethod, $secretHash, 0, $iv);

echo "Encrypted: $encryptedMessageWithIv <br>Decrypted: $decryptedMessage";

在此处尝试 https://3v4l.org/r9pYv

Node.JS (我真的不是node.js程序员,可以有更有效的方法)

Node.JS(i really not a node.js programmer, there can be more efficient way)

var data = "ad699a2537ec2a7f699acbf97ca0080eh3z5EgvnTAvlc76YeR6HdWPmkDDt+pHiG//qo7xnqyQ=";
var key = "315a5504d921f8327f73a356d2bbcbf1";
var iv = new Buffer(data.substring(0,32), 'hex');
var dec = crypto.createDecipheriv('aes-256-cbc',key,iv);
var decrypted = Buffer.concat([dec.update(new Buffer(data.substring(32),'base64')), dec.final()]);
console.log('DECRYPTED TEXT: '+decrypted.toString());

在这里尝试: https://repl.it/FQyo/2

这篇关于在PHP 7中加密在Node JS中解密的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆