• AES加密:PHP与Java互通问题


    问题:使用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;
    }
    
  • 相关阅读:
    根据excel的文件的路径提取其中表的数据到DataSet中 .
    查询SQL Server数据库中的用户表的数量的问题
    C#获取键盘和鼠标操作的时间的类
    使用消息来处理多线程程序中的一些问题
    多线程程序写日志时遇到加锁的问题
    android之横向滚动图
    android listview的一些设置
    android之异步任务
    android之隐式intent调用
    android之广播
  • 原文地址:https://www.cnblogs.com/chenguoli/p/7607155.html
Copyright © 2020-2023  润新知