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 分页类(模仿google)-面试题目解答
Sep 13 PHP
PHP 获取目录下的图片并随机显示的代码
Dec 28 PHP
php模板原理讲解
Nov 13 PHP
php stripslashes和addslashes的区别
Feb 03 PHP
thinkPHP实现表单自动验证
Dec 24 PHP
php.ini中的request_order推荐设置
May 10 PHP
PHP实现文件上传与下载实例与总结
Mar 13 PHP
thinkPHP删除前弹出确认框的简单实现方法
May 16 PHP
CI框架实现框架前后端分离的方法详解
Dec 30 PHP
PHP解决中文乱码
Apr 28 PHP
使用laravel根据用户类型来显示或隐藏字段
Oct 17 PHP
PHP解决高并发问题
Apr 01 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/10/09 PHP
php-fpm配置详解
2014/02/12 PHP
纯PHP代码实现支付宝批量付款
2015/12/24 PHP
php的PDO事务处理机制实例分析
2017/02/16 PHP
Laravel5.7框架安装与使用学习笔记图文详解
2019/04/02 PHP
javascript算法学习(直接插入排序)
2011/04/12 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
javascript实现的HashMap类代码
2014/06/27 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
javascript中 try catch用法
2015/08/16 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
JS实现动画兼容性的transition和transform实例分析
2016/12/13 Javascript
BootStrap fileinput.js文件上传组件实例代码
2017/02/20 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
使用npm安装最新版本nodejs
2018/01/18 NodeJs
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
layui输入框只允许输入中文且判断长度的例子
2019/09/18 Javascript
Vue学习之axios的使用方法实例分析
2020/01/06 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
Python线程创建和终止实例代码
2018/01/20 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
CSS超出文本指定宽度用省略号代替和文本不换行
2016/05/05 HTML / CSS
css3实现可拖动的魔方3d效果
2019/05/07 HTML / CSS
HTML5的革新 结构之美
2011/06/20 HTML / CSS
天猫精选:上天猫,就够了
2016/09/21 全球购物
个人自我评价分享
2013/12/20 职场文书
大学生就业意向书范文
2014/04/01 职场文书
《春天来了》教学反思
2014/04/07 职场文书
霸气队列口号
2014/06/18 职场文书
上班迟到检讨书
2014/09/15 职场文书
大学生自我评价范文
2015/03/03 职场文书
postgresql中如何执行sql文件
2023/05/08 PostgreSQL