• 【PHP】熟悉php对应的DES相关加解密,与java、C#对接加解密工程


    1、记一次与java和C# 对接DES加解密工程;

    2、主要是用到DES的相关加密方案,链接:https://docs.mallcoo.cn/PosPoints/APIDoc_OPlatform.html

    3、本次用到的DES 加密方案是:DES_MODE = "DES/ECB/NoPadding",重中之重,加解密之前看清楚你的项目DES需求,哪一种DES_MODE

    4、不废话,上DES/ECB/NoPadding模式的代码:(代码可与java、C#的DES加解密互通互认)

    function encryptForDES($input, $key)   
    {
       $size = @mcrypt_get_block_size('des','ecb');
       $td = @mcrypt_module_open('des', '', '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 DesEncrypt( $param, $key )
    {
        // 使用方式
        // $encode = SecretUtilTools::encryptForDES($param, $key);
        $encode = encryptForDES($param, $key);
        return $encode;
    }
    
    
    
    /**
    * php版des加密解密,真正可用,兼容java
    * 算法:des
    * 加密模式:ecb
    * 补齐方法:Nopadding | pkcs5
    */
    
    class SecretUtilTools  
    {
        /** 
         * 加密函数 
         * 算法:des 
         * 加密模式:ecb 
         * 补齐方法:PKCS5 
         * @param unknown_type $input 
         */       
        public static  function encryptForDES($input, $key)   
        {
           $size = @mcrypt_get_block_size('des','ecb');
           // $input = self::pkcs5_pad($input, $size);// 打开注释:补齐方式是pKCS5, 否则nopadding
           $td = @mcrypt_module_open('des', '', '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;
        }
    
        public static  function decryptForDES($input,$key)   
        {
           $input = base64_decode($input); 
           $size = @mcrypt_get_block_size('des','ecb');  
           $td = @mcrypt_module_open('des', '', 'ecb', '');  
           $iv = @mcrypt_create_iv (@mcrypt_enc_get_iv_size($td), MCRYPT_RAND);  
           @mcrypt_generic_init($td, $key, $iv);  
           $data = @mdecrypt_generic($td, $input);  
           @mcrypt_generic_deinit($td);  
           @mcrypt_module_close($td);  
           // $data = self::pkcs5_unpad($data, $size);// 打开注释:补齐方式是pKCS5, 否则nopadding
           return $data; 
        }
    
        public static  function pkcs5_pad ($text, $blocksize)   
        {
           $pad = $blocksize - (strlen($text) % $blocksize);  
           return $text . str_repeat(chr($pad), $pad);  
        } 
    
        public static  function pkcs5_unpad($text)   
        {
           $pad = ord($text{strlen($text)-1});  
           if ($pad > strlen($text))  
           {  
               return false;  
           }  
           if (strspn($text, chr($pad), strlen($text) - $pad) != $pad)  
           {  
              return false;  
           }  
           return substr($text, 0, -1 * $pad);  
        }  
    }

    5、其他参考文章:

    1)https://blog.csdn.net/qq43599939/article/details/80226482

    2)https://docs.mallcoo.cn/PosPoints/APIDoc_OPlatform.html

  • 相关阅读:
    HDU2036 计算多边形的面积
    poj 3648 线段树成段更新
    线段树基本知识
    计算几何基本模板
    最长递增子序列问题—LIS
    poj 2503
    Python基础(5)_字符编码、文件处理
    Python基础(4)_字典、集合、bool值
    Python基础(3)_可变对象与不可变对象、列表、元祖和字典
    流程控制练习
  • 原文地址:https://www.cnblogs.com/xuzhengzong/p/15649976.html
Copyright © 2020-2023  润新知