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实现paypal整合方法
Nov 28 PHP
LotusPhp笔记之:Cookie组件的使用详解
May 06 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
Jun 28 PHP
PHP小教程之实现双向链表
Jun 12 PHP
使用PHP生成二维码的方法汇总
Jul 22 PHP
php计算年龄精准到年月日
Nov 17 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
Mar 06 PHP
php实现图片缩略图的方法
Mar 29 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
PHP多维数组排序array详解
Nov 21 PHP
php链式操作的实现方式分析
Aug 12 PHP
PHP Web表单生成器案例分析
Jun 02 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 替换模板变量实现步骤
2009/08/24 PHP
php 对输入信息的进行安全过滤的函数代码
2012/06/29 PHP
Codeigniter校验ip地址的方法
2015/03/21 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
form表单action提交的js部分与html部分
2014/01/07 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
基于javascript如何传递特殊字符
2015/11/30 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
微信小程序之选项卡的实现方法
2017/09/29 Javascript
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
2018/03/13 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
JavaScript实现留言板案例
2020/03/17 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
[07:03]显微镜下的DOTA2第九期——430圣堂刺客杀戮秀
2014/06/20 DOTA
python海龟绘图实例教程
2014/07/24 Python
python服务器端收发请求的实现代码
2014/09/29 Python
理解Python中的绝对路径和相对路径
2017/08/30 Python
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
python和opencv实现抠图
2018/07/18 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
python如何快速拼接字符串
2020/10/28 Python
python爬虫工具例举说明
2020/11/30 Python
国培计划培训感言
2014/03/11 职场文书
员工教育培训协议书
2014/09/27 职场文书
《刷子李》教学反思
2016/02/20 职场文书
100句拼搏进取的名言警句,值得一读!
2019/10/07 职场文书
七年级作文之英语老师
2019/10/28 职场文书
Python 使用dict实现switch的操作
2021/04/07 Python
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL
总结高并发下Nginx性能如何优化
2021/11/01 Servers
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技