设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP中加密解密函数与DES加密解密实例

发布时间:2022-07-25 12:35 所属栏目:121 来源:互联网
导读:例子,php加密解密的例子 加密函数: 代码如下:/* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ //加密函数 srand((double)microtime() * 1000000); $encrypt_key=md5(rand(0, 32000)); $c
  例子,php加密解密的例子
 
  加密函数:
 
  代码如下:/*
 
  *功能:对字符串进行加密处理
 
  *参数一:需要加密的内容
 
  *参数二:密钥
 
  */
 
  function passport_encrypt($str,$key){ //加密函数
 
   srand((double)microtime() * 1000000);
 
   $encrypt_key=md5(rand(0, 32000));
 
   $ctr=0;
 
   $tmp='';
 
   for($i=0;$i<strlen($str);$i++){
 
    $ctr=$ctr==strlen($encrypt_key)?0:$ctr;
 
    $tmp.=$encrypt_key[$ctr].($str[$i] ^ $encrypt_key[$ctr++]);
 
   }
 
   return base64_encode(passport_key($tmp,$key));
 
  }
 
  解密代码如下:
 
   代码如下:/*
 
  *功能:对字符串进行解密处理
 
  *参数一:需要解密的密文
 
  *参数二:密钥
 
  */
 
  function passport_decrypt($str,$key){ //解密函数
 
   $str=passport_key(base64_decode($str),$key);
 
   $tmp='';
 
   for($i=0;$i<strlen($str);$i++){
 
    $md5=$str[$i];
 
    $tmp.=$str[++$i] ^ $md5;
 
   }
 
   return $tmp;
 
  }
 
  辅助函数:
 
  代码如下:/*
 
  *辅助函数
 
  */
 
  function passport_key($str,$encrypt_key){
 
   $encrypt_key=md5($encrypt_key);
 
   $ctr=0;
 
   $tmp='';
 
   for($i=0;$i<strlen($str);$i++){
 
    $ctr=$ctr==strlen($encrypt_key)?0:$ctr;
 
    $tmp.=$str[$i] ^ $encrypt_key[$ctr++];
 
   }
 
   return $tmp;
 
  }
 
  使用如下所示
 
  代码如下:$str='作者:www.jb51.net';
 
  $key='123456';
 
  $encrypt=passport_encrypt($str,$key);
 
  $decrypt=passport_decrypt($encrypt,$key);
 
  echo '原文:',$str."<br><hr>";
 
  echo '密文:',$encrypt."<br><hr>";
 
  echo '译文:',$decrypt."<br><hr>";
 
  DES加密解密函数具体代码如下:
 
  代码如下:<?php
 
  class DES
 
  {
 
   var $key;
 
   var $iv; //偏移量
 
   function DES( $key, $iv=0 ) {
 
   //key长度8例如:1234abcd
 
    $this->key = $key;
 
    if( $iv == 0 ) {
 
     $this->iv = $key;
 
    } else {
 
     $this->iv = $iv; //mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM );
 
    }
 
   }
 
   function encrypt($str) {
 
   //加密,返回大写十六进制字符串
 
    $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );
 
    $str = $this->pkcs5Pad ( $str, $size );
 
    return strtoupper( bin2hex( mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv ) ) );
 
   }

   function decrypt($str) {
 
   //解密
 
    $strBin = $this->hex2bin( strtolower( $str ) );
 
    $str = mcrypt_cbc( MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv );
 
    $str = $this->pkcs5Unpad( $str );
 
    return $str;
 
   }
 
   function hex2bin($hexData) {
 
    $binData = "";
 
    for($i = 0; $i < strlen ( $hexData ); $i += 2) {
 
     $binData .= chr ( hexdec ( substr ( $hexData, $i, 2 ) ) );
 
    }
 
    return $binData;
 
   }
 
   function pkcs5Pad($text, $blocksize) {
 
    $pad = $blocksize - (strlen ( $text ) % $blocksize);
 
    return $text . str_repeat ( chr ( $pad ), $pad );
 
   }
 
   function pkcs5Unpad($text) {
 
    $pad = ord ( $text {strlen ( $text ) - 1} );
 
    if ($pad > strlen ( $text ))
 
     return false;
 
    if (strspn ( $text, chr ( $pad ), strlen ( $text ) - $pad ) != $pad)
 
     return false;
 
    return substr ( $text, 0, - 1 * $pad );
 
   }
 
  }
 
  ?>
 
  以下是测试结果:
 
  代码如下:$str = '12345678';
 
  $key = '1234abcd';
 
  $crypt = new DES($key);
 
  $mstr = $crypt->encrypt($str);
 
  $str = $crypt->decrypt($mstr);
 
  echo  $str.' <=> '.$mstr;
 
  例子2
 
  代码如下:
 
  代码如下:/**
 
  *加密需通过get方式在url中传递的参数
 
  */
 
  function args_encode($data) {
 
  if(is_array($data)) {
 
  $string = http_build_query($data);
 
  return base64_encode($string);
 
  } else {
 
  return false;
 
  }
 
  } 
 
  /**
 
  *获取url中get方式传递的参数
 
  */
 
  function getargs() {
 
  $string = base64_decode($_GET['args']);
 
  parse_str($string,$g);
 
  return $g;
 
  }。
 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读