PHP对接JAVA, 过程使用AES/ECB/PKCS5Padding方式加密

1 篇文章 0 订阅

自己的系统, 需要对接第三方的接口, 人家用的是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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值