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 03 PHP
php 文件缓存函数
Oct 08 PHP
PHP的array_diff()函数在处理大数组时的效率问题
Nov 27 PHP
Function eregi is deprecated (解决方法)
Jun 21 PHP
解析php中如何直接执行SHELL
Jun 28 PHP
PHP图像处理类库及演示分享
May 17 PHP
PHP查找与搜索数组元素方法总结
Jun 12 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
Apr 20 PHP
PHP编程实现csv文件导入mysql数据库的方法
Apr 29 PHP
PHP读取、解析eml文件及生成网页的方法示例
Sep 04 PHP
PDO::inTransaction讲解
Jan 28 PHP
php数组遍历类与用法示例
May 24 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文本操作类
2006/11/25 PHP
解析php中array_merge与array+array的区别
2013/06/21 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
编写自定义的Django模板加载器的简单示例
2015/07/21 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
Python同步遍历多个列表的示例
2019/02/19 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
Python字符串及文本模式方法详解
2020/09/10 Python
浅谈css3中的前缀
2016/07/20 HTML / CSS
HTML5 Canvas 实现K线图的示例代码
2019/12/23 HTML / CSS
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
党员学习十八大感想
2014/01/17 职场文书
实习评语大全
2014/04/26 职场文书
基层党建工作汇报材料
2014/08/15 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
优秀教师申报材料
2014/12/16 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
golang正则之命名分组方式
2021/04/25 Golang
python scrapy简单模拟登录的代码分析
2021/07/21 Python
实现GO语言对数组切片去重
2022/04/20 Golang