12月11
算法: 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));
}
?>
遇到的一个搞笑的病毒
又遇到一病毒,汗。。。


17:08



<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">
<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>
charAt()方法返回一个位于提供给它的参数引索处的字符.
如: str.chatAt(0)检索str中的第一个字符,str.charAt(str.length()-1)检索最后一个字符.
String.fromCharCode 就是把ascii码转成字符串
不好弄啊i -= arg;其中arg也就是你输入的字符串相当于密匙,不知道密匙,不好破解。。。