实用的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 相关文章推荐
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
Apr 18 PHP
php更新mysql后获取改变行数的方法
Dec 25 PHP
php获取文件类型和文件信息的方法
Jul 10 PHP
PHP实现的memcache环形队列类实例
Jul 28 PHP
PHP获取某个月最大天数(最后一天)的方法
Jul 29 PHP
PHP读取文件内容的五种方式
Dec 28 PHP
CI配置多数据库访问的方法
Mar 28 PHP
功能强大的PHP POST提交数据类
Jul 15 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
Nov 08 PHP
php正则表达式基本知识与应用详解【经典教程】
Apr 17 PHP
swoole和websocket简单聊天室开发
Nov 18 PHP
php curl批处理实现可控并发异步操作示例
May 09 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设计模式之观察者模式的应用详解
2013/05/21 PHP
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
php获取网页里所有图片并存入数组的方法
2015/04/06 PHP
php分割合并两个字符串的函数实例
2015/06/19 PHP
PHP错误处理函数
2016/04/03 PHP
javascript 获取图片尺寸及放大图片
2013/09/04 Javascript
jquery easyui使用心得
2014/07/07 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
Prototype框架详解
2015/11/25 Javascript
Angular表单验证实例详解
2016/10/20 Javascript
vue模板语法-插值详解
2017/03/06 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
Python中Django发送带图片和附件的邮件
2017/03/31 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
Python3数字求和的实例
2019/02/19 Python
Python分支语句与循环语句应用实例分析
2019/05/07 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
HTML5实现视频直播功能思路详解
2017/11/16 HTML / CSS
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
房地产开发计划书
2014/01/10 职场文书
旅游安全协议书
2014/04/21 职场文书
大学生职业生涯规划大赛作品(精品)
2014/09/17 职场文书
2014年电厂工作总结
2014/12/04 职场文书
中国世界遗产导游词
2015/02/13 职场文书
预备党员个人总结
2015/02/14 职场文书
班主任自我评价范文
2015/03/11 职场文书
利用Pycharm连接服务器的全过程记录
2021/07/01 Python
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL