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 在线翻译函数代码
May 07 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 PHP
php 文章调用类代码
Aug 11 PHP
php 错误处理经验分享
Oct 11 PHP
利用中国天气预报接口实现简单天气预报
Jan 20 PHP
PHP实现AES256加密算法实例
Sep 22 PHP
关于PHP开发的9条建议
Jul 27 PHP
Yii2 rbac权限控制之菜单menu实例教程
Apr 28 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
Jul 28 PHP
PHP缩略图生成和图片水印制作
Jan 07 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
Feb 15 PHP
PHP levenshtein()函数用法讲解
Mar 08 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
一个连接两个不同MYSQL数据库的PHP程序
2006/10/09 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
php通过ajax实现双击table修改内容
2014/04/28 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
php字符集转换
2017/01/23 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
PHP读取目录树的实现方法分析
2019/03/22 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
热点新闻滚动特效的js代码
2013/08/17 Javascript
jquery判断元素是否隐藏的多种方法
2014/05/06 Javascript
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
详解JavaScript正则表达式中的global属性的使用
2015/06/16 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
jquery实现聊天机器人
2020/02/08 jQuery
python Django模板的使用方法(图文)
2013/11/04 Python
星球大战与Python之间的那些事
2016/01/07 Python
学习python 之编写简单乘法运算题
2016/02/27 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
Python 给定的经纬度标注在地图上的实现方法
2019/07/05 Python
pytest中文文档之编写断言
2019/09/12 Python
python 二维矩阵转三维矩阵示例
2019/11/30 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
详解Flask前后端分离项目案例
2020/07/24 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
村党支部公开承诺书
2014/05/29 职场文书
2015年外联部工作总结
2015/04/03 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP