zoukankan      html  css  js  c++  java
  • PHP版3DES加解密类

    <?php
    /**
    *
    * PHP版3DES加解密类
    *
    * 可与java的3DES(DESede)加密方式兼容
    *
    * @Author:蓝凤(ilanfeng.com)
    *
    * @version: V0.1 2011.02.18
    *
    */
    class Cc3des{
    
        //加密的时候只用替换key就行了,ecb模式不需要提供iv值
        public $key    = "0123456789QWEQWEEWQQ1234";
        public $iv    = "33889955"; //like java: private static byte[] myIV = { 50, 51, 52, 53, 54, 55, 56, 57 };
    
        //解密
        public function decrypt($string) {
            $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');
            srand();
            $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
            $key = substr($this->key, 0, mcrypt_enc_get_key_size($td));
            mcrypt_generic_init($td, $key, $iv);
            $value = @pack("H*", $string);
            $ret = trim(mdecrypt_generic($td, $value));
            // 去掉多余的补位
            $ret = $this->pkcs5_unpad($ret);
            mcrypt_generic_deinit($td);
            mcrypt_module_close($td);
            return $ret;
        }
    
        //加密
        public function encrypt($value) {
            $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');
            srand();
            $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
            $key = substr($this->key, 0, mcrypt_enc_get_key_size($td));
            mcrypt_generic_init($td, $key, $iv);
            $value = $this->pkcs5_pad($value, mcrypt_get_block_size(MCRYPT_3DES, 'ecb'));
            $ret = mcrypt_generic($td, $value);
            mcrypt_generic_deinit($td);
            mcrypt_module_close($td);
            return strtoupper(bin2hex($ret));
        }
    
        /*
         * 位数补齐
         */
        private function pkcs5_pad($text, $blocksize) {
            $pad = $blocksize - (strlen($text) % $blocksize);
            return $text . str_repeat(chr($pad), $pad);
        }
        
        /*
         * 去除补位
         */
        private 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);
        }
    }
    
    ?>
    

      

  • 相关阅读:
    让我偷偷的告诉你:运维加薪的杀手锏是啥?
    网站页面优化必然趋势—WebP 图片!
    如何监控 Tomcat?Zabbix 与 Cloud Insight 对比
    网页增重不可控?试试 OneAPM Cloud Test
    提高 ASP.NET Web 应用性能的 24 种方法和技巧
    OneAlert 入门(三)——事件分析
    Cloud Insight 客户案例-晨芯时代科技有限公司
    Java开发快速上手
    微信小程序快速开发上手
    微信小程序快速开发上手
  • 原文地址:https://www.cnblogs.com/adtuu/p/4739590.html
Copyright © 2011-2022 走看看