[英]Encrypt in PHP 7 decrypt in Node JS
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 在PHP 5.6中,有许多基于http://php.net/manual/en/function.mcrypt-decrypt.php的完美解决方案
For example 例如
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));
}
But PHP7 has a WARNING that discourages using this function. 但是PHP7有一个警告 ,建议不要使用此功能。
"This function has been DEPRECATED as of PHP 7.1.0. Relying on this function is highly discouraged." “此功能从PHP 7.1.0开始已被弃用。强烈建议不要依赖此功能。”
Any ideas for safe encryption using keywords on both ends; 关于在两端使用关键字进行安全加密的任何想法; PHP + Node.js?
PHP + Node.js?
LibMcrypt was abandoned in 2007. More information https://wiki.php.net/rfc/mcrypt-viking-funeral LibMcrypt在2007年被废弃。更多信息https://wiki.php.net/rfc/mcrypt-viking-funeral
You have to use openssl encrypt http://php.net/manual/en/function.openssl-encrypt.php 您必须使用openssl加密http://php.net/manual/en/function.openssl-encrypt.php
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";
Try it here https://3v4l.org/r9pYv 在这里尝试https://3v4l.org/r9pYv
Node.JS (i really not a node.js programmer, there can be more efficient way) Node.JS (我真的不是node.js程序员,可以有更有效的方法)
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());
Try here: https://repl.it/FQyo/2 在这里尝试: https : //repl.it/FQyo/2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.