des加密解密代码

作者: hopevow | 来源:发表于2016-10-09 14:46 被阅读119次

    加密算法

    数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。 该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。

    分类(对称、非对称)

    对称式加密就是加密和解密使用同一个密钥,通常称之为“Session Key ”这种加密技术目前被广泛采用,如美国政府所采用的DES加密标准就是一种典型的“对称式”加密法,它的Session Key长度为56Bits。
      非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们两个必需配对使用,否则不能打开加密文件。这里的“公钥”是指可以对外公布的,“私钥”则不能,只能由持有人一个人知道。它的优越性就在这里,因为对称式的加密方法如果是在网络上传输加密文件就很难把密钥告诉对方,不管用什么方法都有可能被别窃听到。而非对称式的加密方法有两个密钥,且其中的“公钥”是可以公开的,也就不怕别人知道,收件人解密时只要用自己的私钥即可以,这样就很好地避免了密钥的传输安全性问题。

    php des加密解密代码

    <?php
    class DES {
        var $key;
        var $iv; //偏移量
    
        function __construct($key, $iv = 0) {
            //key长度8例如:1234abcd
            $this->key = $key;
            if ($iv == 0) {
                $this->iv = $key;
            } else {
                $this->iv = $iv; //mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM );
            }
        }
    
        function encrypt($str) {
            //加密,返回大写十六进制字符串
            $size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);
            $str = $this->pkcs5Pad($str, $size);
            return strtoupper(bin2hex(mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv)));
        }
    
        function decrypt($str) {
            //解密
            $strBin = $this->hex2bin(strtolower($str));
            $str = mcrypt_cbc(MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv);
            $str = $this->pkcs5Unpad($str);
            return $str;
        }
    
        function hex2bin($hexData) {
            $binData = "";
            for ($i = 0; $i < strlen($hexData); $i += 2) {
                $binData .= chr(hexdec(substr($hexData, $i, 2)));
            }
            return $binData;
        }
    
        function pkcs5Pad($text, $blocksize) {
            $pad = $blocksize - (strlen($text) % $blocksize);
            return $text . str_repeat(chr($pad), $pad);
        }
    
        function pkcs5Unpad($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);
        }
    
    }
    
    // 以下是测试结果:
    // $str = '12345678';
    // $key = '1234abcd';
    // $crypt = new DES($key);
    // $mstr = $crypt->encrypt($str);
    // $str = $crypt->decrypt($mstr);
    // echo  $str.' <=> '.$mstr
    

    相关文章

      网友评论

      • 零一间:第三方对接的时候用到过这个加密方式
        hopevow:@战神悟空 其实接口的话,自己简单设置一个公钥生成一个token带着通讯就好了

      本文标题:des加密解密代码

      本文链接:https://www.haomeiwen.com/subject/dfruyttx.html