自己的系统, 需要对接第三方的接口, 人家用的是JAVA写的, 咱是PHP, 数据传输需要用到AES加密, 我就百度了一波, 发现大多都是用的mcrypt来做的, 但是mcrypt到了7.2版本的时候就废弃了, 我就用了openssl, 可是发现和JAVA对接的时候, openssl加密的数据JAVA的解析不了, 就还是用了mcrypt, 还好线上的PHP版本是7.0的, 下面就是我的代码了, 和其他人写的差不多, 我自己用的就是这些, 加密解密都是ok的
来吧, 我自己测试一波, 把代码贴上
这样就能很好的理解了
做好注释
/**
* 加密
* @param string $input 数据
* @param string $key 秘钥
*/
function ecbEncrypt($input, $key){
$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$input = pkcs5_pad($input, $size);
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$data = mcrypt_generic($td, $input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$data = base64_encode($data);
return $data;
}
function pkcs5_pad ($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
/**
* 解密
* @param string $data 数据
* @param string $key 秘钥
*/
function ecbDecrypt($data, $key){
$decrypted= mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
$key,
base64_decode($data),
MCRYPT_MODE_ECB
);
$dec_s = strlen($decrypted);
$padding = ord($decrypted[$dec_s-1]);
$decrypted = substr($decrypted, 0, -$padding);
return $decrypted;
}
$key = 'guohuiaiwo666hhh';
$encryData = ecbEncrypt('woaiguohui666', $key);
echo $encryData;
$decryptData = ecbDecrypt($encryData, $key);
echo '<br/>';
echo $decryptData;
================================================
以上就是代码, 结果就出来了, 截图出来, 代码可以拿走直接用
就这样, 让我纠结了大半天的东西, 害, 菜鸡啊
======================分割线
还有个方法, 可以使用 phpseclib/phpseclib, 百度一下就可以了, composer或者直接下载下来, 人家的代码给的都有demo, 贼简单, 我就不多说了
小李大人
爱生活爱慧姐
2021-5-20 17:26:31