实用的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实现维护文件代码
Jun 14 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
May 29 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
Jul 03 PHP
php的慢速日志引起的Mysql错误问题分析
May 13 PHP
php实现的css文件背景图片下载器代码
Nov 11 PHP
浅谈PHP中Stream(流)
Jun 08 PHP
PHP实现事件机制实例分析
Jun 26 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
Apr 04 PHP
PHP简单实现无限级分类的方法
May 13 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
PHP MVC框架中类的自动加载机制实例分析
Sep 18 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
Oct 18 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
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
2013/10/15 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
vue组件内部引入外部js文件的方法
2020/01/18 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
Python中的模块和包概念介绍
2015/04/13 Python
详解python Todo清单实战
2018/11/01 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
Tensorflow累加的实现案例
2020/02/05 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
Pycharm配置PyQt5环境的教程
2020/04/02 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
大学四年规划书范文
2013/12/27 职场文书
预备党员转正考核材料
2014/06/03 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
工作保证书
2015/01/17 职场文书
遗失证明范文
2015/06/19 职场文书
SpringBoot 拦截器妙用你真的了解吗
2021/07/01 Java/Android
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python
Win11跳过联网界面创建本地管理账户的3种方法
2022/04/20 数码科技