PHP实现的DES加密解密类定义与用法示例


Posted in PHP onNovember 02, 2020

本文实例讲述了PHP实现的DES加密解密类定义与用法。分享给大家供大家参考,具体如下:

今天写App接口的时候需要传递加密数据给APP端,于是就写了下面的DES加密类,亲测正确代码如下

class CryptDes {
 function __construct(){
  $this->key = 'codelovers'; //密钥
  $this->iv = '15548632'; //偏移量
 }
 /*
  * 加密
  */
 function encrypt($input){
  $size = mcrypt_get_block_size(MCRYPT_DES,MCRYPT_MODE_CBC); //3DES加密将MCRYPT_DES改为MCRYPT_3DES
  $input = $this->pkcs5_pad($input, $size); //如果采用PaddingPKCS7,请更换成PaddingPKCS7方法。
  $key = str_pad($this->key,8,'0'); //3DES加密将8改为24
  $td = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_CBC, '');
  if( $this->iv == '' )
  {
   $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  }
  else
  {
   $iv = $this->iv;
  }
  @mcrypt_generic_init($td, $key, $iv);
  $data = mcrypt_generic($td, $input);
  mcrypt_generic_deinit($td);
  mcrypt_module_close($td);
  $data = base64_encode($data);//如需转换二进制可改成 bin2hex 转换
  return $data;
 }
 /*
  * 解密
  */
 function decrypt($encrypted){
  $encrypted = base64_decode($encrypted); //如需转换二进制可改成 bin2hex 转换
  $key = str_pad($this->key,8,'0'); //3DES加密将8改为24
  $td = mcrypt_module_open(MCRYPT_DES,'',MCRYPT_MODE_CBC,'');//3DES加密将MCRYPT_DES改为MCRYPT_3DES
  if( $this->iv == '' )
  {
   $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  }
  else
  {
   $iv = $this->iv;
  }
  $ks = mcrypt_enc_get_key_size($td);
  @mcrypt_generic_init($td, $key, $iv);
  $decrypted = mdecrypt_generic($td, $encrypted);
  mcrypt_generic_deinit($td);
  mcrypt_module_close($td);
  $y=$this->pkcs5_unpad($decrypted);
  return $y;
 }
 function pkcs5_pad ($text, $blocksize) {
  $pad = $blocksize - (strlen($text) % $blocksize);
  return $text . str_repeat(chr($pad), $pad);
 }
 function pkcs5_unpad($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);
 }
 function PaddingPKCS7($data) {
  $block_size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);//3DES加密将MCRYPT_DES改为MCRYPT_3DES
  $padding_char = $block_size - (strlen($data) % $block_size);
  $data .= str_repeat(chr($padding_char),$padding_char);
  return $data;
 }
}

用法如下:

$str = '3water.com';
$des = new CryptDes();
$mres = $des->encrypt($str); //加密
echo $mres."<br/>";
$jres = $des->decrypt($mres); //解密
echo $jres."<br/>";

运行结果:

TxqbmhK86YWdTtTAQoDOqA==
3water.com

附录:php7 des加密解密

以下内容转自:https://blog.csdn.net/qq_35979073/article/details/81449590

1.在linux 环境中如果没有装encrypt扩展 或者php版本大于7.1不支持encrypt加密扩展

  可以使用openssl加密扩展

下面是封装的加密和解密的方法可直接调用

/**
 * des-ecb加密
 * @param string $data 要被加密的数据
 * @param string $key 加密密钥(64位的字符串)
 */
function des_ecb_encrypt($data, $key){
  return openssl_encrypt ($data, 'des-ecb', $key);
}
 
/**
 * des-ecb解密
 * @param string $data 加密数据
 * @param string $key 加密密钥
 */
function des_ecb_decrypt ($data, $key){
  return openssl_decrypt ($data, 'des-ecb', $key);
}

说明: $key 加密密钥(64位的字符串)  自己定义的

PHP 相关文章推荐
php生成缩略图的类代码
Oct 02 PHP
php ftp文件上传函数(基础版)
Jun 03 PHP
几个有用的php字符串过滤,转换函数代码
May 01 PHP
php实现快速排序法函数代码
Aug 27 PHP
解析PHP无限级分类方法及代码
Jun 21 PHP
DOM XPATH获取img src值的query
Sep 23 PHP
PHP四大安全策略
Mar 12 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
Aug 07 PHP
PHP设计模式之注册树模式分析
Jan 26 PHP
PHP PDOStatement::bindParam讲解
Jan 30 PHP
一文搞懂php的垃圾回收机制
Jun 18 PHP
详解laravel安装使用Passport(Api认证)
Jul 27 #PHP
Ubuntu彻底删除PHP7.0的方法
Jul 27 #PHP
PHP实现的CURL非阻塞调用类
Jul 26 #PHP
PHP等比例压缩图片的实例代码
Jul 26 #PHP
PHP实现非阻塞模式的方法分析
Jul 26 #PHP
php实现等比例压缩图片
Jul 26 #PHP
PHP输出Excel PHPExcel的方法
Jul 26 #PHP
You might like
一个oracle+PHP的查询的例子
2006/10/09 PHP
php实现简单洗牌算法
2013/06/18 PHP
linux下php上传文件注意事项
2016/06/11 PHP
Yii2 RESTful中api的使用及开发实例详解
2016/07/06 PHP
PHP加密解密类实例代码
2016/07/20 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
php生成word并下载代码实例
2019/03/15 PHP
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
python中尾递归用法实例详解
2015/04/28 Python
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
Python中pillow知识点学习
2018/04/30 Python
python用match()函数爬数据方法详解
2019/07/23 Python
Djang的model创建的字段和参数详解
2019/07/27 Python
python实现人机五子棋
2020/03/25 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
2020/06/24 Python
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
抽奖活动主持词
2014/03/31 职场文书
感恩节活动策划方案
2014/05/16 职场文书
导师就业推荐信范文
2014/05/22 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
世界遗产的导游词
2015/02/13 职场文书
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS
redis 解决库存并发问题实现数量控制
2022/04/08 Redis
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL