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

 更新时间:2014年08月20日 11:35:02   作者:琼台  
这篇文章主要介绍了实用的PHP带公钥加密类分享,本类实现每次的加密结果都不一样,但解密没有问题,非常实用的一个加密类,需要的朋友可以参考下

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://www.jb51.net';
 
// 实例化加密类
$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:

结果2:

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

相关文章

  • Linux基于php-fpm模式的lamp搭建phpmyadmin的方法

    Linux基于php-fpm模式的lamp搭建phpmyadmin的方法

    这篇文章主要介绍了Linux基于php-fpm模式的lamp搭建phpmyadmin的方法,以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
    2018-10-10
  • 微信支付开发订单查询实例

    微信支付开发订单查询实例

    本篇文章主要介绍微信支付中订单查询功能的实现,并提供代码实例,希望能帮助到微信支付开发的小伙伴
    2016-07-07
  • php 二维数组快速排序算法的实现代码

    php 二维数组快速排序算法的实现代码

    这篇文章主要介绍了php 二维数组快速排序算法的实现代码的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • php实现base64图片上传方式实例代码

    php实现base64图片上传方式实例代码

    本篇文章主要介绍了php实现base64图片上传方式实例代码,这里整理了详细的代码,具有一定的参考价值,有需要的小伙伴可以参考下。
    2017-02-02
  • PHP实现搜索地理位置及计算两点地理位置间距离的实例

    PHP实现搜索地理位置及计算两点地理位置间距离的实例

    这篇文章主要介绍了PHP实现搜索地理位置及计算两点地理位置间距离的实例,地理位置搜寻的例子中使用到了MongoDB数据库,需要的朋友可以参考下
    2016-01-01
  • thinkPHP5.0框架API优化后的友好性分析

    thinkPHP5.0框架API优化后的友好性分析

    这篇文章主要介绍了thinkPHP5.0框架API优化后的友好性,结合具体实例分析了thinkPHP5.0框架进行API优化后在数据输出及错误调试方面的友好性改进,需要的朋友可以参考下
    2017-03-03
  • CodeIgniter框架过滤HTML危险代码

    CodeIgniter框架过滤HTML危险代码

    这篇文章主要介绍了CodeIgniter框架过滤HTML危险代码,需要的朋友可以参考下
    2014-06-06
  • Zend Framework数据库操作技巧总结

    Zend Framework数据库操作技巧总结

    这篇文章主要介绍了Zend Framework数据库操作技巧,结合实例形式总结分析了Zend Framework针对数据库操作的常见函数、常用操作及相关注意事项,需要的朋友可以参考下
    2017-02-02
  • 基于ThinkPHP5.0实现图片上传插件

    基于ThinkPHP5.0实现图片上传插件

    thinkphp5.0 图片上传插件可预览裁剪图片和保存原图片,执行裁剪图片后会删除 裁剪的原图片目录,以便减少空间。具体实现代码大家参考下本文
    2017-09-09
  • PHP实现两种排课方式

    PHP实现两种排课方式

    这篇文章主要介绍了PHP实现两种排课方式,第一种排课方式比较好理解,开始时间和结束时间,第二种比较复杂一些,有开始上课时间和结束上课时间和第几周,具体实现代码参考下本文
    2021-06-06

最新评论