实用的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 相关文章推荐
windows xp下安装pear
Dec 02 PHP
解析php如何将日志写进syslog
Jun 28 PHP
php获取字段名示例分享
Mar 03 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
Apr 17 PHP
CodeIgniter中实现泛域名解析
Jul 19 PHP
PHP清除数组中所有字符串两端空格的方法
Oct 20 PHP
php管理nginx虚拟主机shell脚本实例
Nov 19 PHP
PHP针对JSON操作实例分析
Jan 12 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
php 如何获取文件的后缀名
Jun 05 PHP
thinkPHP5.0框架模块设计详解
Mar 18 PHP
PHP压缩图片功能的介绍
Mar 21 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生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
2010/12/08 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
jQuery实现tag便签去重效果的方法
2015/01/20 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
Bootstrap进度条组件知识详解
2016/05/01 Javascript
js实现HTML中Select二级联动的实例
2018/01/05 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
2018/11/01 Javascript
微信小程序仿抖音短视频切换效果的实例代码
2020/06/24 Javascript
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
python创建和使用字典实例详解
2013/11/01 Python
使用python调用浏览器并打开一个网址的例子
2014/06/05 Python
wxPython窗口的继承机制实例分析
2014/09/28 Python
python带参数打包exe及调用方式
2019/12/21 Python
python中return不返回值的问题解析
2020/07/22 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
白宫黑市官网:White House Black Market
2016/11/17 全球购物
南京某公司笔试题
2013/01/27 面试题
怎么写好自荐信
2013/10/30 职场文书
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
村官学习十八大感想
2014/01/15 职场文书
行政专员的岗位职责
2014/03/10 职场文书
遗产继承公证书
2014/04/09 职场文书
办公室主任竞聘演讲稿
2014/05/15 职场文书
婚庆公司计划书
2014/09/15 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
学习作风建设心得体会
2014/10/22 职场文书
单位租房协议书范本
2014/12/04 职场文书
离职告别感言
2015/08/04 职场文书
JavaScript异步操作中串行和并行
2021/11/20 Javascript
ipad隐藏软件app图标方法
2022/04/19 数码科技