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 ?
1 个解决方案
#1
3
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)
节点。我真的不是一个节点。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
#1
3
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)
节点。我真的不是一个节点。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