php中加密解密DES类的简单使用方法示例


Posted in PHP onMarch 26, 2020

本文实例讲述了php中加密解密DES类的简单使用方法。分享给大家供大家参考,具体如下:

在平时的开发工作中,我们经常会对关键字符进行加密,可能为了安全 也可能为了规范,所以要正确使用DES加密解密

php中加密解密DES类的简单使用方法示例

代码1:

class DES
{
  var $key; // 密钥
  var $iv; // 偏移量

  function __construct( $key, $iv=0 ) {
    $this->key = $key;
    if( $iv == 0 ) {

      $this->iv = $key;

    } else {

      $this->iv = $iv; 
      // 创建初始向量, 并且检测密钥长度, Windows 平台请使用 MCRYPT_RAND
      // 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 );
 // bin2hex 把 ASCII 字符的字符串转换为十六进制值
    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 );
  }
}

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

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

  • mcrypt_cbc 以 CBC 模式加解密数据, 在PHP 5.5.0+被弃用, PHP 7.0.0被移除
  • mcrypt_encrypt / mcrypt_decrypt 使用给定参数加密 / 解密, 在PHP 7.1.0+被弃用, 在PHP 7.2.0+被移除

代码2:

class DES7
{

  //要改的加密, 使用 openssl

  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);

  }

}
PHP 相关文章推荐
PHP静态新闻列表自动生成代码
Jun 14 PHP
php 阴历-农历-转换类代码
Jan 16 PHP
php的array_multisort()使用方法介绍
May 16 PHP
如何使用PHP计算上一个月的今天
May 23 PHP
PHP获取文件相对路径的方法
Feb 26 PHP
php curl 上传文件代码实例
Apr 27 PHP
解决微信授权回调页面域名只能设置一个的问题
Dec 11 PHP
thinkPHP5.0框架引入Traits功能实例分析
Mar 18 PHP
php PDO实现的事务回滚示例
Mar 23 PHP
利用php获得flv视频长度的实例代码
Oct 26 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
Sep 04 PHP
关于Curl在Swoole协程中的解决方案详析
Sep 12 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 #PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 #PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 26 #PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 #PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 #PHP
You might like
PHP+DBM的同学录程序(3)
2006/10/09 PHP
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
php验证是否是md5编码的简单代码
2014/04/01 PHP
PHP经典面试题集锦
2015/03/19 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
2015/12/21 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
php支付宝APP支付功能
2020/07/29 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
Jquery插件之多图片异步上传
2010/10/20 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
JQuery解析HTML、JSON和XML实例详解
2014/03/29 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
2016/07/28 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
2016/09/14 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
javascript实现日历效果
2019/06/17 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
vue 二维码长按保存和复制内容操作
2020/09/22 Javascript
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
Python中字典的基础知识归纳小结
2015/08/19 Python
python sort、sort_index方法代码实例
2019/03/28 Python
python中@property和property函数常见使用方法示例
2019/10/21 Python
Django restframework 框架认证、权限、限流用法示例
2019/12/21 Python
Python龙贝格法求积分实例
2020/02/29 Python
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
.net面试题
2016/09/17 面试题
开学典礼决心书
2014/03/11 职场文书
职业生涯规划书前言
2014/04/15 职场文书
借款协议书
2014/09/16 职场文书
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电