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代码
Sep 14 PHP
PHP实现多进程并行操作的详解(可做守护进程)
Jun 18 PHP
浅析php变量作用域的一些问题
Aug 08 PHP
php调用c接口无错版介绍
Mar 11 PHP
Yii框架登录流程分析
Dec 03 PHP
PHP中通过trigger_error触发PHP错误示例
Jun 23 PHP
PHP导入导出Excel代码
Jul 07 PHP
PHP实现QQ快速登录的方法
Sep 28 PHP
php实现的读取CSV文件函数示例
Feb 07 PHP
thinkPHP显示不出验证码的原因与解决方法分析
May 20 PHP
PHP实现打包zip并下载功能
Jun 12 PHP
PHP接口类(interface)的定义、特点和应用示例
May 18 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
ThinkPHP之import方法实例详解
2014/06/20 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
老生常谈PHP面向对象之解释器模式
2017/05/17 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
js 字符串转化成数字的代码
2011/06/29 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
jQuery中.live()方法的用法深入解析
2013/12/30 Javascript
JavaScript动态添加列的方法
2015/03/25 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
详解angular2封装material2对话框组件
2017/03/03 Javascript
javascript+html5+css3自定义提示窗口
2017/06/21 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
Python Pillow Image Invert
2019/01/22 Python
python 自定义装饰器实例详解
2019/07/20 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
详解python statistics模块及函数用法
2019/10/27 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
2014/04/08 HTML / CSS
法国在线药房:DoctiPharma
2020/10/21 全球购物
预备党员思想汇报范文
2014/01/11 职场文书
力学专业求职信
2014/07/23 职场文书
教师节标语大全
2014/10/07 职场文书
六查六看六改心得体会
2014/10/14 职场文书
英语演讲开场白
2015/05/29 职场文书
五一晚会主持词
2015/07/01 职场文书
react中的DOM操作实现
2021/06/30 Javascript
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android