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 strcmp使用说明
Apr 22 PHP
php在window iis的莫名问题的测试方法
May 14 PHP
PHP处理Json字符串解码返回NULL的解决方法
Sep 01 PHP
php内存缓存实现方法
Jan 24 PHP
php中ob_flush函数和flush函数用法分析
Mar 18 PHP
PHP的APC模块实现上传进度条
Oct 27 PHP
php封装好的人民币数值转中文大写类
Dec 20 PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 PHP
PHP大文件分片上传的实现方法
Oct 28 PHP
tp5.1 实现setInc字段自动加1
Oct 18 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 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通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
PHP实现的数据对象映射模式详解
2019/03/20 PHP
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
JavaScript 学习笔记(五)
2009/12/31 Javascript
js 小贴士一星期合集
2010/04/07 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
2014/01/17 Javascript
jQuery解析json格式数据简单实例
2016/01/22 Javascript
JavaScript+html5 canvas制作色彩斑斓的正方形效果
2016/01/27 Javascript
Javascript中的 “&amp;” 和 “|” 详解
2017/02/02 Javascript
EasyUI中的dataGrid的行内编辑
2017/06/22 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
2019/01/24 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
跟老齐学Python之折腾一下目录
2014/10/24 Python
Python线程的两种编程方式
2015/04/14 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
python中强大的format函数实例详解
2018/12/05 Python
Python lxml解析HTML并用xpath获取元素的方法
2019/01/02 Python
WxPython实现无边框界面
2019/11/18 Python
使用pytorch实现可视化中间层的结果
2019/12/30 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
Java基础面试题
2014/07/19 面试题
双十佳事迹材料
2014/01/29 职场文书
学生喝酒检讨书
2014/02/06 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
2019个人工作总结
2019/06/21 职场文书
Python+Tkinter制作专属图形化界面
2022/04/01 Python