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 相关文章推荐
服务器端解压缩zip的脚本
Dec 22 PHP
php下防止单引号,双引号在接受页面转义的设置方法
Sep 25 PHP
在VS2008中编译MYSQL5.1.48的方法
Jul 03 PHP
php whois查询API制作方法
Jun 23 PHP
PHP的可变变量名的使用方法分享
Feb 05 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
Jul 02 PHP
邮箱正则表达式实现代码(针对php)
Jun 21 PHP
php结合js实现点击超链接执行删除确认操作
Oct 31 PHP
apache和PHP如何整合在一起
Oct 12 PHP
yii2分页之实现跳转到具体某页的实例代码
Jun 02 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
Oct 22 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 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
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
php读取msn上的用户信息类
2008/12/05 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
javascript编程起步(第一课)
2007/01/10 Javascript
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
js获取form的方法
2015/05/06 Javascript
微信内置浏览器私有接口WeixinJSBridge介绍
2015/05/25 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
Vue学习笔记进阶篇之单元素过度
2017/07/19 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
详解webpack 热更新优化
2018/09/13 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
2019/11/23 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
[08:08]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY
2014/06/25 DOTA
进一步了解Python中的XML 工具
2015/04/13 Python
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
python读取mysql数据绘制条形图
2020/03/25 Python
python 实现逻辑回归
2020/12/30 Python
英国领先的办公用品供应商:Viking
2016/08/01 全球购物
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
Bugatchi官方网站:男士服装在线
2019/04/10 全球购物
生产车间班组长岗位职责
2014/01/06 职场文书
暑期培训随笔感言
2014/03/10 职场文书
甜品店创业计划书
2014/09/21 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
javaScript Array api梳理
2021/03/31 Javascript
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python
Python中re模块的元字符使用小结
2022/04/07 Python