12月11

一则PHP字符串加密解密代码

| |
17:08    Bear 本站原创    不指定

算法: http://bbs.phpchina.com/thread-37376-1-1.html

<?php
function encrypt($txt,$key){
    $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";
    $ikey ="-bear-x6g6ZWm2G9gq3kRIxsZ6_vr0Bo.pOrm";
    $nh1 = rand(0,64);
    $nh2 = rand(0,64);
    $nh3 = rand(0,64);
    $ch1 = $chars{$nh1};
    $ch2 = $chars{$nh2};
    $ch3 = $chars{$nh3};
    $nhnum = $nh1 + $nh2 + $nh3;
    $knum = 0;$i = 0;
    while(isset($key{$i})) $knum +=ord($key{$i++});
    $mdKey = substr(md5(md5(md5($key.$ch1).$ch2.$ikey).$ch3),$nhnum%8,$knum%8 + 16);
    $txt = base64_encode($txt);
    $txt = str_replace(array('+','/','='),array('-','_','.'),$txt);
    $tmp = '';
    $j=0;$k = 0;
    $tlen = strlen($txt);
    $klen = strlen($mdKey);
    for ($i=0; $i<$tlen; $i++) {
      $k = $k == $klen ? 0 : $k;
      $j = ($nhnum+strpos($chars,$txt{$i})+ord($mdKey{$k++}))%64;
      $tmp .= $chars{$j};
    }

        $tmplen = strlen($tmp);
    $tmp = substr_replace($tmp,$ch3,$nh2 % ++$tmplen,0);
    $tmp = substr_replace($tmp,$ch2,$nh1 % ++$tmplen,0);
    $tmp = substr_replace($tmp,$ch1,$knum % ++$tmplen,0);
     return $tmp;

    }
function decrypt($txt,$key)
    {
    $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";
    $ikey ="-bear-x6g6ZWm2G9gq3kRIxsZ6_vr0Bo.pOrm";
    $knum = 0;$i = 0;
    $tlen = strlen($txt);
    while(isset($key{$i})) $knum +=ord($key{$i++});
    $ch1 = $txt{$knum % $tlen};
    $nh1 = strpos($chars,$ch1);
    $txt = substr_replace($txt,'',$knum % $tlen--,1);
    $ch2 = $txt{$nh1 % $tlen};
    $nh2 = strpos($chars,$ch2);
    $txt = substr_replace($txt,'',$nh1 % $tlen--,1);
    $ch3 = $txt{$nh2 % $tlen};
    $nh3 = strpos($chars,$ch3);
    $txt = substr_replace($txt,'',$nh2 % $tlen--,1);
    $nhnum = $nh1 + $nh2 + $nh3;
    $mdKey = substr(md5(md5(md5($key.$ch1).$ch2.$ikey).$ch3),$nhnum % 8,$knum % 8 + 16);
    $tmp = '';
    $j=0; $k = 0;
    $tlen = strlen($txt);
    $klen = strlen($mdKey);
    for ($i=0; $i<$tlen; $i++) {
      $k = $k == $klen ? 0 : $k;
      $j = strpos($chars,$txt{$i})-$nhnum - ord($mdKey{$k++});
      while ($j<0) $j+=64;
      $tmp .= $chars{$j};
    }
    $tmp = str_replace(array('-','_','.'),array('+','/','='),$tmp);
    return trim(base64_decode($tmp));
    }
?>
阅读(2087) | 评论(1) | 引用(0)
ll03512888 Email
04/13/2010 18:56
谢了楼主,再帮我解释一下这段代码,谢谢了
<html>
<head>
    <title>Needless</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link type="text/css" rel="stylesheet" href="./style.css">
</head>
<body alink="gold" background="./dot.gif" bgcolor="#000000" link="gold" text="#008000" vlink="#00c000">
<center>
<table border="0">
</table>
<table width="668" border="0" cellpadding="3" cellspacing="3" class="main">
  <tr>

  </tr>
<tr><td>
<center><h1>Needless</h1></center>
<br>
<div style="align:left;margin-left:20px;font-size: 15px;font-family:'Courier New'">
<br>
<font color='red'>Key Words:</font>Nothing<br>
<br><br>
<div style="margin-left:50px;color: #00ff00">

<br>
    <form name="doit" action="javascript:b()">
    <p align="center">
       <input type="text" name="number" maxlength="20" size="20">&nbsp;
        <input type="submit" value="OK">
        <br>
    </form>
    <font >请输入一个六位数的数字.<br><br>记住,你要的是"Key"而非其它!</font>
</center>

<script language="javascript">
var chr = "278330|278369|278317|278386|278313|278382|278367|278313|278375|278382|278365|278381|278369|278317|278340|278366|278386|278323|278297|278348|278365|278349|278308|278322|278300|278321|278314|278339|278364|278298|278329|278316|278317|";
var str = "";

function a( arg )
{
  var i,k;
  i = "";
  for( k = 0; k < chr.length; k ++ )
  {
    if( chr.charAt(k) == '|' )
    {
      i -= arg;
      str += String.fromCharCode(i);
      i = "";
    }
    else
    {
      i += chr.charAt(k);
    }
  }
}
function b()
{
  str = "";
  a( doit.number.value );
  alert( str );
}

</script>
</div>
</table><br>
<br><br>
</table>
  <br>
  <br>
</center>
</body>
</html>
Bear 回复于 04/13/2010 20:32
charAt(int index)方法是一个能够用来检索特定引索下的字符的String实例的方法.
    charAt()方法返回一个位于提供给它的参数引索处的字符.
    如: str.chatAt(0)检索str中的第一个字符,str.charAt(str.length()-1)检索最后一个字符.
String.fromCharCode 就是把ascii码转成字符串

不好弄啊i -= arg;其中arg也就是你输入的字符串相当于密匙,不知道密匙,不好破解。。。
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]