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

2015-01-24信息快讯网

这篇文章主要介绍了实用的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 = 'http://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:

实用的PHP带公钥加密类分享(每次加密结果都不一样哦)_信息快讯网

结果2:

实用的PHP带公钥加密类分享(每次加密结果都不一样哦)_信息快讯网

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

PHP PDO fetch 模式各种参数的输出结果一览
PHP实现格式化文件数据大小显示的方法
php自定义加密与解密程序实例
推荐一本PHP程序猿都应该拜读的书
推荐10个提供免费PHP脚本下载的网站
php使用google地图应用实例
制作安全性高的PHP网站的几个实用要点
非常实用的PHP常用函数汇总
一款简单实用的php操作mysql数据库类
简单实用的PHP防注入类实例
几个实用的PHP内置函数使用指南
php中base64_decode与base64_encode加密解密函数实例
php常用hash加密函数
php基于base64解码图片与加密图片还原实例
php基于mcrypt的加密解密实例
从零开始学YII2框架(一)通过Composer安装Yii2框架
PHP文件缓存内容保存格式实例分析
PHP date()函数警告: It is not safe to rely on the system解决方法
PHP中exec函数和shell_exec函数的区别
实例讲解PHP面向对象之多态
图解找出PHP配置文件php.ini的路径的方法
一个简洁实用的PHP缓存类完整实例
简单实用的网站PHP缓存类实例
PHP中对各种加密算法、Hash算法的速度测试对比代码
2个比较经典的PHP加密解密函数分享
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
兼容PHP和Java的des加密解密代码分享
php写的AES加密解密类分享
神盾加密解密教程(三)PHP 神盾解密工具
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
19个超实用的PHP代码片段
php实现aes加密类分享
©2014-2024 dbsqp.com