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 相关文章推荐
写一个用户在线显示的程序
Oct 09 PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
Oct 19 PHP
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
Mar 28 PHP
php检测图片木马多进制编程实践
Apr 11 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
Aug 22 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
详解PHP防止直接访问.php 文件的实现方法
Jul 28 PHP
PHP使用CURL实现下载文件功能示例
Jun 03 PHP
laravel-admin的图片删除实例
Sep 30 PHP
详解no input file specified 三种解决方法
Nov 29 PHP
PHP实现简单日历类编写
Aug 28 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
数据库的日期格式转换
2006/10/09 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
js对象数组按属性快速排序
2011/01/31 Javascript
JQuery对checkbox操作 (循环获取)
2011/05/20 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
js中的面向对象入门
2017/03/06 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
原生js中运算符及流程控制示例详解
2021/01/05 Javascript
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
2014/02/24 Python
在Python中给Nan值更改为0的方法
2018/10/30 Python
python样条插值的实现代码
2018/12/17 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
基于梯度爆炸的解决方法:clip gradient
2020/02/04 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
10种CSS3实现的loading动画,挑一个走吧?
2020/11/16 HTML / CSS
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
介绍一下Python下range()函数的用法
2013/11/07 面试题
领导视察欢迎词
2014/01/15 职场文书
2014爱耳日宣传教育活动总结
2014/03/09 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
应收账款管理制度
2015/08/06 职场文书
升学宴祝酒词
2015/08/11 职场文书
2015年度考核个人工作总结
2015/10/24 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书