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 已经成熟
Dec 04 PHP
如何在PHP程序中防止盗链
Apr 09 PHP
PHP 数组和字符串互相转换实现方法
Mar 26 PHP
PHP中加密解密函数与DES加密解密实例
Oct 17 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
Mar 19 PHP
PHP解压tar.gz格式文件的方法
Feb 14 PHP
利用php输出不同的心形图案
Apr 22 PHP
PHPStorm+XDebug进行调试图文教程
Jun 13 PHP
PHP互换两个变量值的方法(不用第三变量)
Nov 14 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
Laravel框架实现的记录SQL日志功能示例
Jun 19 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
Jun 12 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的array数组和使用实例简明教程(容易理解)
2014/03/20 PHP
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
php入门教程之Zend Studio设置与开发实例
2016/09/09 PHP
php函数mkdir实现递归创建层级目录
2016/10/27 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
javascript学习笔记(九) js对象 设计模式
2012/06/19 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
js返回顶部实例分享
2016/12/21 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
详解Webpack实战之构建 Electron 应用
2017/12/25 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
python模块之time模块(实例讲解)
2017/09/13 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
通过python顺序修改文件名字的方法
2018/07/11 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
python元组的概念知识点
2019/11/19 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
美国领先的机场停车聚合商:Airport Parking Reservations
2020/02/28 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
运动会广播稿80字
2014/01/23 职场文书
监察建议书范文
2014/03/12 职场文书
小学三八妇女节活动总结
2015/02/06 职场文书
保研推荐信格式
2015/03/25 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android
java调用Restful接口的三种方法
2021/08/23 Java/Android