您的位置 首页 技术

php中加密解密DES的正确使用姿势

前言 :在平时的开发中,我们经常会对关键字符进行加密,可能为了安全 也可能为了规范,今天就将就DES加密正确使用 任务流程图 片段1 说干就干,我开始编写des加密类 代码如下 c…

前言 :在平时的开发中,我们经常会对关键字符进行加密,可能为了安全 也可能为了规范,今天就将就DES加密正确使用

任务流程图

7ed4db60281eb7ca924cb5b3377e0a1.png

片段1

说干就干,我开始编写des加密类 代码如下

class DES{    var $key;    var $iv; //偏移量     function DES( $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 );    }}

测试代码

<?phpheader("Content-type: text/html; charset=utf-8");error_reporting(0);require "DES5.php";// 秘钥$key = 'MOxinrui';$crypt = new DES5($key);$str = 'podsmia';echo "原字符是".$str.'<br>';$encrypt_str = $crypt->encrypt($str);echo "加密后的字符是".$encrypt_str.'<br>';$decrypt_str= $crypt->decrypt($encrypt_str);echo "解密后的字符是".$decrypt_str.'<br>';

效果

原字符是podsmia加密后的字符是9490E64136137FD8解密后的字符是podsmia

过了几天,我闲着没事,继续运行一下代码

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; DES5 has a deprecated constructor in D:\phpstudy_pro\WWW\des\DES5.php on line 2

原字符是podsmia

Fatal error: Uncaught Error: Call to undefined function mcrypt_get_block_size() in D:\phpstudy_pro\WWW\des\DES5.php:19 Stack trace: #0 D:\phpstudy_pro\WWW\des\1.php(10): DES5->encrypt('podsmia') #1 {main} thrown in D:\phpstudy_pro\WWW\des\DES5.php on line 19

给我报了 fatalerror 这不科学啊,我什么都没动啊。怎么回事呢。后面经过一番研究。发现是php版本的问题。我之前运行成功,那是因为我用的 是php5.5,但是这次报错我用的是php7.2.。那么我需要找替代方案。。接下来看我操作

片段2

<?phpclass DES7{    //要改的加密    public function desEncrypt($str,$key) {        $iv = $key;        $data = openssl_encrypt($str,"DES-CBC",$key,OPENSSL_RAW_DATA,$iv);        $data = strtolower(bin2hex($data));        return $data;    }     //要改的解密    public function desDecrypt($str,$key) {        $iv = $key;        return openssl_decrypt (hex2bin($str), 'DES-CBC', $key, OPENSSL_RAW_DATA,$iv);    }}

测试代码

<?phpheader("Content-type: text/html; charset=utf-8");//error_reporting(0);// 秘钥require "DES7.php";$key = 'MOxinrui';$crypt = new DES7($key);$str = '问哪个';echo "原字符是".$str.'<br>';$encrypt_str = $crypt->desEncrypt($str,$key);echo "加密后的字符是".$encrypt_str.'<br>';$decrypt_str= $crypt->desDecrypt($encrypt_str,$key);echo "解密后的字符是".$decrypt_str.'<br>';

效果

原字符是问哪个加密后的字符是074b8beee21eefca7ec3a60cb8edda18解密后的字符是问哪个

问题完美解决。大家以后遇到这种问题,直接照搬我的代码即可,方便省事。

更多PHP相关知识,请访问PHP教程!

以上就是php中加密解密DES的正确使用姿势的详细内容,更多请关注24课堂在线网其它相关文章!

本文来自网络,不代表24小时课堂在线立场,转载请注明出处:https://www.24ketang.cn/32494.html

为您推荐

返回顶部