首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP 7加密节点JS解密

用PHP 7加密节点JS解密
EN

Stack Overflow用户
提问于 2017-01-22 15:41:22
回答 1查看 1.8K关注 0票数 2

在PHP5.6中,有许多基于http://php.net/manual/en/function.mcrypt-decrypt.php的完美解决方案。

例如

代码语言:javascript
复制
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有一个警告,它不鼓励使用这个函数。

“从PHP7.1.0开始,这个函数就被废弃了。依赖这个函数是非常不可取的。”

对于两端使用关键字的安全加密有什么想法;PHP + Node.js?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-22 16:09:23

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

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

代码语言:javascript
复制
<?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程序员,可以有更有效的方法)

代码语言:javascript
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41792883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档