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 相关文章推荐
WHOIS类的修改版
Oct 09 PHP
PHP file_get_contents 函数超时的几种解决方法
Jul 30 PHP
PHP iconv 函数转gb2312的bug解决方法
Oct 11 PHP
PHP读取txt文件的内容并赋值给数组的代码
Nov 03 PHP
php函数指定默认值方法的小例子
Dec 04 PHP
WAMP环境中扩展oracle函数库(oci)
Jun 26 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
Oct 08 PHP
php中时间函数date及常用的时间计算
May 12 PHP
php简单处理XML数据的方法示例
May 19 PHP
PHP延迟静态绑定的深入讲解
Apr 02 PHP
Laravel-添加后台模板AdminLte的实现方法
Oct 08 PHP
THINKPHP5.1 Config的配置与获取详解
Jun 08 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
PHP的简易冒泡法代码分享
2012/08/28 PHP
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
理解JavaScript中Promise的使用
2016/01/18 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
jQuery中Find选择器用法示例
2016/09/21 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
Js经典案例的实例代码
2018/05/10 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
2020/04/03 Javascript
python函数局部变量用法实例分析
2015/08/04 Python
python爬取内容存入Excel实例
2019/02/20 Python
python3实现单目标粒子群算法
2019/11/14 Python
Django用户身份验证完成示例代码
2020/04/03 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
美国一家主打母婴用品的团购网站:zulily
2017/09/19 全球购物
人力资源管理毕业生自荐信
2013/11/21 职场文书
法人授权委托书范本
2014/09/17 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
村党建工作汇报材料
2014/11/02 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
公司停电通知
2015/04/15 职场文书
不同意离婚上诉状
2015/05/23 职场文书
学籍证明模板
2015/06/18 职场文书
教师节大会主持词
2015/07/06 职场文书
推广普通话宣传标语口号
2015/12/26 职场文书