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 相关文章推荐
jq的get传参数在utf-8中乱码问题的解决php版
Jul 23 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
Mar 20 PHP
深入PHP nl2br()格式化输出的详解
Jun 05 PHP
PHP中的Streams详细介绍
Nov 12 PHP
浅谈本地WAMP环境的搭建
May 13 PHP
smarty的section嵌套循环用法示例
May 28 PHP
php rmdir使用递归函数删除非空目录实例详解
Oct 20 PHP
PHP基于ORM方式操作MySQL数据库实例
Jun 21 PHP
PHP多维数组排序array详解
Nov 21 PHP
php微信开发之谷歌测距
Jun 14 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
Oct 16 PHP
Laravel统一错误处理为JSON的方法介绍
Oct 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
PHP安全配置详细说明
2011/09/26 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
2014/07/01 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
PDO::getAttribute讲解
2019/01/28 PHP
javaScript对象和属性的创建方法
2007/01/15 Javascript
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
jQuery学习笔记之创建DOM元素
2015/01/19 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
js实现表格筛选功能
2017/01/18 Javascript
解决node修改后需频繁手动重启的问题
2018/05/13 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
2019/02/28 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
简单理解Python中基于生成器的状态机
2015/04/13 Python
Python读写ini文件的方法
2015/05/28 Python
详解Python中的from..import绝对导入语句
2016/06/21 Python
PyCharm代码格式调整方法
2018/05/23 Python
python 保存float类型的小数的位数方法
2018/10/17 Python
Django web框架使用url path name详解
2019/04/29 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
Python hashlib模块实例使用详解
2019/12/24 Python
python中什么是面向对象
2020/06/11 Python
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
linux面试题参考答案(6)
2016/06/23 面试题
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
招商业务员岗位职责
2013/12/16 职场文书
电气工程和自动化自荐信范文
2013/12/25 职场文书
《姥姥的剪纸》教学反思
2014/02/25 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
2014年教师德育工作总结
2014/11/10 职场文书
网吧员工管理制度
2015/08/05 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
导游词之无锡唐城
2019/12/12 职场文书