我用nodejs加密数据向PHP后台发送数据。nodejs模拟了几组数据加密。
奇怪的是,5组数据,有三组是解密成功,2组是解密失败。
但是,如果我把数据的缩小一些,又都可以解密成功。解密失败的时候 ,返回是空。
下面是nodejs加密函数
'use strict';
const crypto = require('crypto');
const config = require('config');
/**
* AES_128_CBC 加密
* 128位
* return base64
*/
function encryption(data) {
let key = AES_conf.key;
let iv = AES_conf.iv;
var cipherChunks = [];
var cipher = crypto.createCipheriv('aes-128-cbc', key, iv);
cipher.setAutoPadding(true);
cipherChunks.push(cipher.update(data, 'utf8', 'base64'));
cipherChunks.push(cipher.final('base64'));
return cipherChunks.join('');
}
下面是PHP的解密函数
<?php
namespace App\Http\Controllers\Service;
class AesEncryptService
{
const AES_IV = "1072132852963992"; //16位
// 解密
public static function aes_decrypt($str)
{
$key = self::getKey();
$decrypted = openssl_decrypt(base64_decode($str), 'aes-128-cbc', $key, OPENSSL_RAW_DATA, self::AES_IV);
add_log($decrypted);
return $decrypted;
}
下面是解析的结果。
[2020-04-01 18:32:10] INFO: {"id":4,"ip":"sqlite.windows.com","db_order":1,"start":1580486400,"end":1582905599}
[2020-04-01 18:32:10] INFO:
[2020-04-01 18:32:10] INFO: {"id":1,"ip":"sqlite.windows.com","db_order":1,"start":1580486400,"end":1582905599}
[2020-04-01 18:32:10] INFO: {"id":4,"ip":"sqlite.windows.com","db_order":1,"start":1580486400,"end":1582905599}
[2020-04-01 18:32:10] INFO:
其中,第2组和第4组是,解析不出来的。
如果,我把其中的start和end字段都删除,重新解析的话,又都可以了。
我觉得,应该是nodejs和PHP的规则不一样的问题。我在网上找了好久,也没有相关的介绍。你们能给点建议吗?