aes-256-cbc 加密解密php与nodejs的加密数据互通

15 篇文章 0 订阅

nodejs的加密解密代码示例如下:

#!/usr/bin/env node 
    var crypto = require('crypto'); 
    //解密 
    function decode(cryptkey, iv, secretdata) { 
        var  
        decipher = crypto.createDecipheriv('aes-256-cbc', cryptkey, iv), 
        decoded  = decipher.update(secretdata, 'base64', 'utf8'); 
         
        decoded += decipher.final( 'utf8' ); 
        return decoded; 
    } 
    //解密 
    function encode(cryptkey, iv, cleardata) { 
        var  
        encipher = crypto.createCipheriv('aes-256-cbc', cryptkey, iv), 
        encoded  = encipher.update(cleardata, 'utf8', 'base64'); 
 
        encoded += encipher.final( 'base64' ); 
        return encoded; 
    } 
 
    var  
    cryptkey   = crypto.createHash('sha256').update('__tazai_wolf__key').digest(), 
    iv         = '1234567890000000', 
    buf        = "Hello World", 
    enc        = encode( cryptkey, iv, buf ); 
 
    var dec        = decode(cryptkey, iv, enc); 
 
    function b64enc(data) { 
        var b   = new Buffer(data, 'binary'); 
        return b.toString('base64'); 
    } 
 
console.warn("Encoded length: ", enc); 
console.warn("Decoded all: " + dec); 

请问php能相应的加密解密代码应该如何写?
要求能解上面加密后的如:Gpkr1WGBFhMvNd/Hr0eaBg==
也能加密数据给nodejs进行解密。

需要注意的是在编译的时候需要加上–with-openssl选项

#!/usr/bin/env php
<?php
function decode($cryptkey, $iv, $secretdata){
return openssl_decrypt($secretdata,'aes-256-cbc',$cryptkey,false,$iv);
}
function encode($cryptkey, $iv, $secretdata){
return openssl_encrypt($secretdata,'aes-256-cbc',$cryptkey,false,$iv);
}
$cryptkey = hash('sha256','__tazai_wolf__key',true);
$iv = '1234567890000000';
$buf = "Hello World";

$enc = encode($cryptkey,$iv,$buf);
$dec = decode($cryptkey, $iv, $enc);

echo "Encoded length: ",$enc,"\n";
echo "Decoded all: ",$dec,"\n";

运行结果:

./encode.js 
Encoded length: Gpkr1WGBFhMvNd/Hr0eaBg==
Decoded all: Hello World
➜ ./encode.php 
Encoded length: Gpkr1WGBFhMvNd/Hr0eaBg==
Decoded all: Hello World
  • 做成模块
var crypto = require('crypto');
var fs = require('fs');
const Buffer = require('safer-buffer').Buffer
var fs = require('fs');



let iv = '1234567890009000';

/* 输入base64 输出utf8*/
exports.strEncode = function strEncode(buf) {
    //const iv = Buffer.alloc(16, 0);
    let cryptkey = fs.readFileSync('../public/utils/rsa_private_key.pem');
    cryptkey = crypto.createHash('sha256').update(cryptkey).digest(),
        enc = encode(cryptkey, iv, buf);
    return base64Encode(enc);
};

/*进来base64 出去utf8*/
exports.strDecode = function strDecode(buf) {
    //const iv = Buffer.alloc(16, 0);
    let cryptkey = fs.readFileSync('../public/utils/rsa_private_key.pem');
    cryptkey = crypto.createHash('sha256').update(cryptkey).digest(),
        dec = decode(cryptkey, iv, base64Decode(buf));
    return dec;
};

//解密
decode = function decode(cryptkey, iv, secretdata) {
    var decipher = crypto.createDecipheriv('aes-256-cbc', cryptkey, iv),
        decoded = decipher.update(secretdata, 'base64', 'utf8');

    decoded += decipher.final('utf8');
    return decoded;
};

//解密
encode = function encode(cryptkey, iv, cleardata) {
    var encipher = crypto.createCipheriv('aes-256-cbc', cryptkey, iv),
        encoded = encipher.update(cleardata, 'utf8', 'base64');

    encoded += encipher.final('base64');
    return encoded;
};

base64Decode = function base64Decode(str) {
    let buffer = Buffer.from(str, 'base64');
    let s = buffer.toString("utf-8");
    return s;
};

base64Encode = function base64Encode($base64Str) {
    let buffer = Buffer.from($base64Str);
    let s = buffer.toString('base64');
    return s;
};




function b64enc(data) {
    var b = new Buffer(data, 'binary');
    return b.toString('base64');
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值