• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

AES加密:PHP与Java互通问题

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

问题:使用Java默认的AES加密方式(Cipher.getInstance("AES"))并对加密后结果进行Base64编码,这样php(http://phpaes.com/使用这里免费的AES实现版本

)里可以成功进行解密。而在Php加密后的字符串无法在Java中成功解密。

1.Java中AES加密与解密默认使用AES/ECB/PKCS5Padding模式;

2.php中的AES算法实现使用AES/ECB/NoPadding

要注意特定的Padding实现跟算法的blockSize有关,这里php的blocksize是16。在php的aes加密前先对源字符串进行Padding,问题得到解决。

前面提到Java默认的AES加密在php 的上述aes实现中可以成功解密。其实该php解密虽然看上去是成功的,其实里面还是有些问题的。因为解密出来的字符串因为Java端加密时会padding操作,php解密以后padding的字符没有被去掉导致会出现问题。因此解密时需要removePaddingStr才能得到原始的字符串。

代码参考:http://blog.csdn.net/cctcc/article/details/54926947

/**
 * 手机号加密
 */
private function phoneEncode($phone)
{
    $key = 'abcdefgh1234567890';

    $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
    $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

    $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
    $padding = $size - (strlen($phone) % $size);
    $phone_padding = $phone . str_repeat(chr($padding), $padding);

    mcrypt_generic_init($td, $key, $iv);
    $cyper_text = mcrypt_generic($td, $phone_padding);
    $result = strtoupper(bin2hex($cyper_text));
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);

    return $result;
}

/**
 * 手机号解密
 */
private function phoneDecode($phone)
{
    $key = 'abcdefgh1234567890';

    $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);
    $text = mdecrypt_generic($td, hex2bin($phone));

    $pad = ord($text{strlen($text) - 1});
    $phone = substr($text, 0, -1 * $pad);

    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);

    return $phone;
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Windows下安装Redis及php的redis拓展教程发布时间:2022-07-10
下一篇:
PHPMVC开发之单一入口文件(路由文件)发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap