实用的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实现Socket服务器的代码
Apr 03 PHP
PHP的explode和implode的使用说明
Jul 17 PHP
php中将网址转换为超链接的函数
Sep 02 PHP
php ckeditor上传图片文件名乱码解决方法
Nov 15 PHP
用PHP来计算某个目录大小的方法
Apr 01 PHP
PHP整数取余返回负数的相关解决方法
May 15 PHP
如何让thinkphp在模型中自动完成session赋值小教程
Sep 05 PHP
PHP使用内置函数生成图片的方法详解
May 09 PHP
php实现的http请求封装示例
Nov 08 PHP
Redis构建分布式锁
Mar 28 PHP
Laravel5.5新特性之友好报错以及展示详解
Aug 13 PHP
PHP长连接实现与使用方法详解
Feb 11 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
BBS(php &amp; mysql)完整版(六)
2006/10/09 PHP
关于js与php互相传值的介绍
2013/06/25 PHP
Codeigniter中集成smarty和adodb的方法
2016/03/04 PHP
php支持断点续传、分块下载的类
2016/05/02 PHP
一段实用的php验证码函数
2016/05/19 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
php生出随机字符串
2017/07/06 PHP
JQuery页面图片切换和新闻列表滚动效果的具体实现
2013/09/26 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
2016/05/25 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
js微信支付实现代码
2016/12/22 Javascript
angularjs中ng-attr的用法详解
2016/12/31 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
vue脚手架搭建过程图解
2018/06/06 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Django Highcharts制作图表
2016/08/27 Python
关于Python 3中print函数的换行详解
2017/08/08 Python
PyQt5每天必学之弹出消息框
2018/04/19 Python
python调用staf自动化框架的方法
2018/12/26 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
python3 enum模块的应用实例详解
2019/08/12 Python
Python在OpenCV里实现极坐标变换功能
2019/09/02 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
Selenium向iframe富文本框输入内容过程图解
2020/04/10 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
抗洪抢险事迹材料
2014/05/06 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python
python基础之爬虫入门
2021/05/10 Python
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis
小程序实现侧滑删除功能
2022/06/25 Javascript