实用的PHP带公钥加密类分享(每次加密结果都不一样哦)


Posted in PHP onAugust 20, 2014

WEB交互安全一直是个各大网站的首要解决方案,本文介绍的PHP加密类非常实用哦,带有公钥,这是最大的亮点,没有公钥是不能解密的,加密度非常高。

类代码:

<?php
/**
 * PHP加密类
 * 琼台博客
 */
class Jiami{
  // 公钥
  protected $key = 'lee'; 
  private function keyED($txt,$encrypt_key){
    $encrypt_key = md5($encrypt_key);
    $ctr=0;
    $tmp = '';
    for ($i=0;$i<strlen($txt);$i++){
      if ($ctr==strlen($encrypt_key)){
        $ctr=0;
      }
      $tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1);
      $ctr++;
    }
    return $tmp;
  }
 
  public function encrypt($txt,$key=''){
    if(empty($key)){
      $key=$this->key;
    }
    srand((double)microtime()*1000000);
    $encrypt_key = md5(rand(0,32000));
    $ctr=0;
    $tmp = '';
    for ($i=0;$i<strlen($txt);$i++) {
      if ($ctr==strlen($encrypt_key)){
        $ctr=0;
      }
      $tmp.= substr($encrypt_key,$ctr,1).(substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1));
      $ctr++;
    }
    return $this->keyED($tmp,$key);
  }
 
  public function decrypt($txt,$key=''){
    if(empty($key)){
      $key=$this->key;
    }
 
    $txt = $this->keyED($txt,$key);
    $tmp = '';
    for ($i=0;$i<strlen($txt);$i++){
      $md5 = substr($txt,$i,1);
      $i++;
      $tmp.= (substr($txt,$i,1) ^ $md5);
    }
    return $tmp;
  }
 
  public function setKey($key){
    if(empty($key)){
      return null;
    }
    $this->key=$key;
  }
 
  public function getPK(){
    return $this->key;
  }
 
}

使用方法:

<?php
// 先包含加密类
require_once('jiami.class.php');
 
// 要加密的字符串
$string = 'https://3water.com';
 
// 实例化加密类
$jiami= new Jiami();
 
// 设置公钥
$jiami->setKey('qttc');
 
// 加密字符串
$enc = $jiami->encrypt($string,$jiami->getPK());
 
// 解密字符串
$dec = $jiami->decrypt($enc,$jiami->getPK());
 
echo '<meta charset="utf-8" />';
echo '加密前 : '.$string .'<br/>';
echo '加密后 : '.$enc .'<br/>';
echo '解密后 : '.$dec;
?>

页面执行结果

结果1:

实用的PHP带公钥加密类分享(每次加密结果都不一样哦)

结果2:

实用的PHP带公钥加密类分享(每次加密结果都不一样哦)

由以上结果可以看到,每次加密产生的加密字符串都不一样,这是随机的。
解密的时候,需要使用加密时的公钥,否则无法解密。如你这边加密公钥使用‘qttc',解密的时候,也需要使用这个'qttc'作为公钥去解密,否则无法解密。

PHP 相关文章推荐
PHP怎样调用MSSQL的存储过程
Oct 09 PHP
调整优化您的LAMP应用程序的5种简单方法
Jun 26 PHP
PHP 数据结构 算法 三元组 Triplet
Jul 02 PHP
php中用foreach来操作数组的代码
Jul 17 PHP
php 搜索框提示(自动完成)实例代码
Feb 05 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
Mar 01 PHP
php防止伪造的数据从URL提交方法
Jun 27 PHP
smarty简单入门实例
Nov 28 PHP
微信 开发生成带参数的二维码的实例
Nov 23 PHP
php简单构造json多维数组的方法示例
Jun 08 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
php post换行的方法
Feb 03 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 #PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
Aug 20 #PHP
PHP中exec函数和shell_exec函数的区别
Aug 20 #PHP
实例讲解PHP面向对象之多态
Aug 20 #PHP
图解找出PHP配置文件php.ini的路径的方法
Aug 20 #PHP
Linux下PHP连接Oracle数据库
Aug 20 #PHP
Win7 64位系统下PHP连接Oracle数据库
Aug 20 #PHP
You might like
十天学会php之第八天
2006/10/09 PHP
将数字格式的计算结果转为汉字格式
2006/10/09 PHP
php下实现折线图效果的代码
2007/04/28 PHP
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
PHP检测移动设备类mobile detection使用实例
2014/04/14 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
javascript知识点收藏
2007/02/22 Javascript
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
express的中间件cookieParser详解
2014/12/04 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
vue 弹框产生的滚动穿透问题的解决
2018/09/21 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
vue中移动端调取本地的复制的文本方式
2020/07/18 Javascript
原生js实现拖拽移动与缩放效果
2020/08/24 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
2020/03/28 Python
美国最大的网络男装服装品牌:Bonobos
2017/05/25 全球购物
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
五年级语文教学反思
2014/01/30 职场文书
承认错误的检讨书
2014/01/30 职场文书
业务员自荐信范文
2014/04/20 职场文书
学前班评语大全
2014/05/04 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书
go 实现简易端口扫描的示例
2021/05/22 Golang
springboot中一些比较常用的注解总结
2021/06/11 Java/Android
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers