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 文件上传源码分析(RFC1867)
Oct 30 PHP
php access 数据连接与读取保存编辑数据的实现代码
May 12 PHP
php中把美国时间转为北京时间的自定义函数分享
Jul 28 PHP
PHP生成数组再传给js的方法
Aug 07 PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 PHP
PHP SOCKET编程详解
May 22 PHP
Yii2验证器(Validator)用法分析
Jul 23 PHP
php实现基于openssl的加密解密方法
Sep 30 PHP
Ajax实现对静态页面的文章访问统计功能示例
Oct 10 PHP
在Laravel中使用DataTables插件的方法
May 29 PHP
PHP实现微信提现功能(微信商城)
Nov 21 PHP
php判断数组是否为空的实例方法
May 10 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
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
2010/03/27 PHP
PHP连接SQLServer2005 的问题解决方法
2010/07/19 PHP
TMDPHP 模板引擎使用教程
2012/03/13 PHP
PHP实现利用MySQL保存session的方法
2014/08/23 PHP
几个实用的PHP内置函数使用指南
2014/11/27 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
PHP hebrev()函数用法讲解
2019/02/21 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
js和jquery设置disabled属性为true使按钮失效
2014/08/07 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
Vue-Router实现组件间跳转的三种方法
2017/11/07 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
微信小程序解析富文本过程详解
2019/07/13 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
2019/11/09 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
跟老齐学Python之模块的加载
2014/10/24 Python
Python的Django框架中从url中捕捉文本的方法
2015/07/20 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
Flask中endpoint的理解(小结)
2019/12/11 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
Python如何创建装饰器时保留函数元信息
2020/08/07 Python
超级实用的8个Python列表技巧
2020/08/24 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
介绍一下你对SOA的认识
2016/04/24 面试题
会计人员岗位职责
2014/03/19 职场文书
热爱祖国演讲稿
2014/05/04 职场文书
承诺书范文
2014/06/03 职场文书
三傻大闹宝莱坞观后感
2015/06/03 职场文书