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 无限级缓存的类的扩展
Mar 16 PHP
PHP 代码规范小结
Mar 08 PHP
php中常用的预定义变量小结
May 09 PHP
PHP实现抓取HTTPS内容
Dec 01 PHP
Linux系统递归生成目录中文件的md5的方法
Jun 29 PHP
PHP设置进度条的方法
Jul 08 PHP
PHP+Ajax+JS实现多图上传
May 07 PHP
php array_values 返回数组的值实例详解
Nov 17 PHP
php 从一个数组中随机的取出若干个不同的数实例
Dec 31 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
Jan 07 PHP
laravel5.1框架model类查询的实现方法
Oct 08 PHP
浅谈laravel框架与thinkPHP框架的区别
Oct 23 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写的简易聊天室代码
2011/06/04 PHP
php合并js请求的例子
2013/11/01 PHP
phpmailer中文乱码问题的解决方法
2014/04/22 PHP
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
2016/05/09 PHP
用JavaScript脚本实现Web页面信息交互
2006/10/11 Javascript
JQuery 学习技巧总结
2010/05/21 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
七夕情人节丘比特射箭小游戏
2015/08/20 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
2016/02/03 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
通过构造函数实例化对象的方法
2017/06/28 Javascript
vue服务端渲染的实例代码
2017/08/28 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
Python中取整的几种方法小结
2017/01/06 Python
python 查找字符串是否存在实例详解
2017/01/20 Python
django 发送手机验证码的示例代码
2018/04/25 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
《小草和大树》教学反思
2014/02/16 职场文书
幼儿园亲子活动总结
2014/04/26 职场文书
大班上学期个人总结
2015/02/13 职场文书
详解Python中的进程和线程
2021/06/23 Python
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js