当前位置:首页 > PHP教程 > php高级应用 > 列表

php数字加密解密的程序

发布:smiling 来源: PHP粉丝网  添加日期:2018-10-16 10:55:46 浏览: 评论:0 
  1. <?php 
  2. /** 
  3.  * Created by PhpStorm. 
  4.  * User: Administrator 
  5.  * Date: 2016/11/1 
  6.  * Time: 12:26 
  7.  */ 
  8. /*把数字转换成字符对应解析 
  9.  * @param mixed   $in    String or long input to translate 
  10.  * @param boolean $to_num  Reverses translation when true 
  11.  * @param mixed   $pad_up  Number or boolean padds the result up to a specified length 
  12.  * @param string  $passKey Supplying a password makes it harder to calculate the original ID 
  13.  */ 
  14. function alphaID($in$to_num = false, $pad_up = false, $passKey = null) 
  15.     $index = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  16.     if ($passKey !== null) { 
  17.         // Although this function's purpose is to just make the 
  18.         // ID short - and not so much secure, 
  19.         // with this patch by Simon Franz (http://blog.snaky.org/) 
  20.         // you can optionally supply a password to make it harder 
  21.         // to calculate the corresponding numeric ID 
  22.  
  23.         for ($n = 0; $n<strlen($index); $n++) { 
  24.             $i[] = substr$index,$n ,1); 
  25.         } 
  26.  
  27.         $passhash = hash('sha256',$passKey); 
  28.         $passhash = (strlen($passhash) < strlen($index)) 
  29.             ? hash('sha512',$passKey
  30.             : $passhash
  31.  
  32.         for ($n=0; $n < strlen($index); $n++) { 
  33.             $p[] =  substr($passhash$n ,1); 
  34.         } 
  35.  
  36.         array_multisort($p,  SORT_DESC, $i); 
  37.         $index = implode($i); 
  38.     } 
  39.  
  40.     $base  = strlen($index); 
  41.  
  42.     if ($to_num) { 
  43.         // Digital number  <<--  alphabet letter code 
  44.         $in  = strrev($in); 
  45.         $out = 0; 
  46.         $len = strlen($in) - 1; 
  47.         for ($t = 0; $t <= $len$t++) { 
  48.             $bcpow = bcpow($base$len - $t); 
  49.             $out   = $out + strpos($indexsubstr($in$t, 1)) * $bcpow
  50.         } 
  51.  
  52.         if (is_numeric($pad_up)) { 
  53.             $pad_up--; 
  54.             if ($pad_up > 0) { 
  55.                 $out -= pow($base$pad_up); 
  56.             } 
  57.         } 
  58.         $out = sprintf('%F'$out); 
  59.         $out = substr($out, 0, strpos($out'.')); 
  60.     } else { 
  61.         // Digital number  -->>  alphabet letter code 
  62.         if (is_numeric($pad_up)) { 
  63.             $pad_up--; 
  64.             if ($pad_up > 0) { 
  65.                 $in += pow($base$pad_up); 
  66.             } 
  67.         } 
  68.  
  69.         $out = ""
  70.         for ($t = floor(log($in$base)); $t >= 0; $t--) { 
  71.             $bcp = bcpow($base$t); 
  72.             $a   = floor($in / $bcp) % $base
  73.             $out = $out . substr($index$a, 1); 
  74.             $in  = $in - ($a * $bcp); 
  75.         } 
  76.         $out = strrev($out); // reverse 
  77.     } //phpfensi.com 
  78.  
  79.     return $out
  80. $str =  alphaID("1245"); 
  81. echo $str."<br/>"
  82. echo  alphaID($str,true); 

Tags: php数字加密 php数字解密

分享到: