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 生成的XML以FLASH获取为乱码终极解决
Aug 07 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
Oct 12 PHP
shopex中集成的站长统计功能的代码简单分析
Aug 11 PHP
PHP图片上传代码
Nov 04 PHP
让codeigniter与swfupload整合的最佳解决方案
Jun 12 PHP
php实现的click captcha点击验证码类实例
Sep 23 PHP
PHP积分兑换接口实例
Feb 09 PHP
php模板引擎技术简单实现
Mar 15 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
PHP设计模式之工厂方法设计模式实例分析
Apr 25 PHP
PHP PDOStatement::nextRowset讲解
Feb 01 PHP
PHP示例演示发送邮件给某个邮箱
Apr 03 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用static方法的原因
2018/09/12 PHP
javascript写的简单的计算器,内容很多,方法实用,推荐
2011/12/29 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
js函数调用的方式
2014/05/06 Javascript
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
Javascript动画效果(2)
2016/10/11 Javascript
jQuery与JavaScript节点创建方法的对比
2016/11/18 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
vue-router传递参数的几种方式实例详解
2018/11/13 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
MySQL适配器PyMySQL详解
2017/09/20 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
2018/04/27 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
2020/04/02 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
CSS3移动端vw+rem不依赖JS实现响应式布局的方法
2019/01/23 HTML / CSS
金山毒霸系列的笔试题
2013/04/13 面试题
初三物理教学反思
2014/01/21 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
清明节演讲稿
2014/05/27 职场文书
社区志愿者活动方案
2014/08/18 职场文书
信用卡逾期证明示例
2014/09/13 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
雷锋电影观后感
2015/06/10 职场文书
为自己工作观后感
2015/06/11 职场文书
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
2021/06/21 Oracle