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 相关文章推荐
PHP4实际应用经验篇(4)
Oct 09 PHP
从手册去理解分析PHP session机制
Jul 17 PHP
php中session退出登陆问题
Feb 27 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
Mar 12 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
Mar 07 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
Sep 29 PHP
PHP使用ActiveMQ实例
Feb 05 PHP
使用PHPExcel导出Excel表
Sep 08 PHP
php中文语义分析实现方法示例
Sep 28 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 JSON 数据解析代码
2010/05/26 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
php使用date和strtotime函数输出指定日期的方法
2014/11/14 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
php实现统计IP数及在线人数的示例代码
2020/07/22 PHP
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
jquery密码强度校验
2015/12/02 Javascript
js判断文本框输入的内容是否为数字
2015/12/23 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
JavaScript之filter_动力节点Java学院整理
2017/06/28 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
js实现时钟定时器
2020/03/26 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
Python ZipFile模块详解
2013/11/01 Python
在Python的Django框架中创建和使用模版
2015/07/15 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
设置jupyter中DataFrame的显示限制方式
2020/04/12 Python
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
C语言变量的命名规则都有哪些
2013/12/27 面试题
生产厂长岗位职责
2014/02/21 职场文书
酒店总经理岗位职责
2014/03/17 职场文书
党员干部公开承诺书
2014/03/26 职场文书
党性分析材料格式
2014/12/19 职场文书
公司团队口号霸气押韵
2015/12/24 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL
Django drf请求模块源码解析
2021/06/08 Python