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 相关文章推荐
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
php 数组使用详解 推荐
Jun 02 PHP
php实现自动获取生成文章主题关键词功能的深入分析
Jun 03 PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
Nov 27 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
Jul 25 PHP
php中rename函数用法分析
Nov 15 PHP
php解析字符串里所有URL地址的方法
Apr 03 PHP
PHP实现多图上传(结合uploadify插件)思路分析
Nov 30 PHP
php根据用户名和手机号查询是否存在手机号码
Feb 16 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
PHP格式化显示时间date()函数代码
Oct 03 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 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
如何将数据从文本导入到mysql
2006/10/09 PHP
PHP 防恶意刷新实现代码
2010/05/16 PHP
jquery+json 通用三级联动下拉列表
2010/04/19 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
不用一句js代码初始化组件
2016/01/27 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
2017/04/29 jQuery
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
2017/06/12 jQuery
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
微信小程序实现时间预约功能
2018/11/27 Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
2019/03/21 Javascript
微信小程序实现下拉刷新动画
2019/06/21 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
微信小程序中data-key属性之数据传输(经验总结)
2020/08/22 Javascript
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
重命名批处理python脚本
2013/04/05 Python
理解Python中函数的参数
2015/04/27 Python
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
python自定义时钟类、定时任务类
2021/02/22 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
Python在线和离线安装第三方库的方法
2020/10/31 Python
将HTML5 Canvas的内容保存为图片借助toDataURL实现
2013/05/20 HTML / CSS
Huda Beauty官方商店:化妆和美容产品
2020/09/05 全球购物
大学生自我鉴定范文模板
2014/01/21 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
Oracle 多表查询基本语法实例
2022/04/18 Oracle
Nginx静态压缩和代码压缩提高访问速度详解
2022/05/30 Servers