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实现的功能是显示8条基色色带
Oct 09 PHP
php中static静态变量的使用方法详解
Jun 04 PHP
PHP面向对象分析设计的61条军规小结
Jul 17 PHP
解析yii数据库的增删查改
Jun 20 PHP
用PHP和Shell写Hadoop的MapReduce程序
Apr 15 PHP
php递归删除目录下的文件但保留的实例分享
May 10 PHP
CI框架自动加载session出现报错的解决办法
Jun 17 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
Sep 22 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
Smarty模板简单配置与使用方法示例
May 23 PHP
PHP的Json中文处理解决方案
Sep 29 PHP
laravel 验证错误信息到 blade模板的方法
Sep 29 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
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
PHP页面中文乱码分析
2013/10/29 PHP
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
JavaScript 语言的递归编程
2010/05/18 Javascript
原生js操作checkbox用document.getElementById实现
2013/10/12 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
JavaScript中的prototype和constructor简明总结
2014/04/05 Javascript
javascript实现别踩白块儿小游戏程序
2015/11/22 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
Bootstrap表单控件学习使用
2017/03/07 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
[06:25]第二届DOTA2亚洲邀请赛主赛事第二天比赛集锦.mp4
2017/04/03 DOTA
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
python3+PyQt5实现文档打印功能
2018/04/24 Python
Django model序列化为json的方法示例
2018/10/16 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
安装python及pycharm的教程图解
2019/10/10 Python
python django中8000端口被占用的解决
2019/12/17 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
类如何去实现接口
2013/12/19 面试题
《落花生》教学反思
2014/02/25 职场文书
《那片绿绿的爬山虎》教学反思
2014/02/27 职场文书
学校献爱心活动总结
2014/07/08 职场文书
商场租赁意向书
2014/07/30 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
2016年综治宣传月活动宣传标语口号
2016/03/16 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
在CSS中使用when/else的方法
2022/01/18 HTML / CSS