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&amp;mysql(三)
Oct 09 PHP
实用函数2
Nov 08 PHP
php session应用实例 登录验证
Mar 16 PHP
五款常用mysql slow log分析工具的比较分析
May 22 PHP
关于svn冲突的解决方法
Jun 21 PHP
使用PHP curl模拟浏览器抓取网站信息
Oct 28 PHP
php curl_init函数用法
Jan 31 PHP
thinkphp实现图片上传功能分享
Mar 04 PHP
php上传图片存入数据库示例分享
Mar 11 PHP
php实现两个数组相加的方法
Feb 17 PHP
PHP Filter过滤器全面解析
Aug 09 PHP
Laravel多用户认证系统示例详解
Mar 13 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文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
2012/06/13 PHP
关于crontab的使用详解
2013/06/24 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
理解JavaScript中的对象 推荐
2011/01/09 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
实现图片预加载的三大方法及优缺点分析
2014/11/19 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
JS出现失效的情况总结
2017/01/20 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
浅析Python中的序列化存储的方法
2015/04/28 Python
python 创建弹出式菜单的实现代码
2017/07/11 Python
pandas 小数位数 精度的处理方法
2018/06/09 Python
Python中的引用知识点总结
2019/05/20 Python
Django admin model 汉化显示文字的实现方法
2019/08/12 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
兼职学生的自我评价
2013/11/24 职场文书
运动会入场词50字
2014/02/20 职场文书
超市商业计划书
2014/05/04 职场文书
李培根演讲稿
2014/05/22 职场文书
计划生育标语
2014/06/23 职场文书
公司授权委托书范文
2014/08/02 职场文书
聊聊redis-dump工具安装问题
2022/01/18 Redis