前言 :在平时的开发中,我们经常会对关键字符进行加密,可能为了安全 也可能为了规范,今天就将就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教程!

更多相关文章

  1. php开发一个文件管理系统(附代码)
  2. Docker+LNMP+Jenkins+码云实现 PHP 代码自动化部署
  3. 在PHP中进行会话处理(代码详解)
  4. PHP生成有背景的二维码图片(代码示例)
  5. PHP生成器yield处理大量数据业务(代码示例)
  6. 38条技巧优化PHP代码(总结)
  7. PHP实现大转盘抽奖算法(代码实例)
  8. php中使用fsockopen实现异步请求(代码示例)
  9. 解放双手!MyBatis官方代码生成工具给力!

随机推荐

  1. Android 对象序列化之追求完美的 Serial
  2. Android之EditText
  3. 1、一、Introduction(入门): 0、Introduc
  4. android开发每日汇总【2011-12-3】
  5. android EditText inputType 中文解说
  6. android xml属性大全
  7. android 4.0中的Fragment
  8. Android:EditText 所有属性
  9. Android中xml布局 详解
  10. Android 控件view的可见,不可见,隐藏的设