<?php
echo '要加密的字符:',$string = "test";
echo '<br />加密:';
echo $encode= EnCrypt($string);
echo '<br />解密:';
echo DeCrypt($encode);
function DeCrypt($deString)
{
//echo $deString;
$l = strlen($deString);
$X = Array("1","2","3","4","A","B","C","D","E","F","G","H","I","J","K","L","M","0");
$Y = Array("5","6","7","8","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","9");
$keyLen = count($Y);
$tmpEn = "";
for($i=2;$i<$l;$i=$i+4)
{
//echo 'I:',$i;
$x0 = substr($deString,$i - 2,1);
$y0 = substr($deString,$i - 1,1);
$x1 = substr($deString,$i - 0,1);
$y1 = substr($deString,$i + 1,1);
$xIndex = array_search($x1,$X) - array_search($x0,$X);
$yIndex = array_search($y1,$Y) - array_search($y0,$Y);
If($yIndex < 0) $yIndex = $yIndex + $keyLen;
$tmpEn = $tmpEn.chr($yIndex * $keyLen + $xIndex);
}
return $tmpEn;
}
//加密:
function EnCrypt($string)
{
$len = strlen($string);
$X = Array("1","2","3","4","A","B","C","D","E","F","G","H","I","J","K","L","M","0");
$Y = Array("5","6","7","8","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","9");
$keyLen = count($Y);
for($i=0; $i<$len; $i++)
{
$tmp[] = ord($string[$i]);
}
foreach($tmp as $key => $value)
{
$xIndex = $value%$keyLen;
$xArr[] = getArr($keyLen-1, $xIndex);
$yIndex = ($value - $xIndex)/$keyLen;
$yArr[] = getArr($keyLen-1, $yIndex);
}
foreach($xArr as $key => $value)
{
foreach($value as $keykey => $valuevalue)
{
$tmptmp[$key]['x'][$keykey]['1'] = $X[$keykey];
$tmptmp[$key]['x'][$keykey]['2'] = $X[$valuevalue];
}
}
foreach($yArr as $key => $value)
{
foreach($value as $keykey => $valuevalue)
{
$tmptmp[$key]['y'][$keykey]['1'] = $Y[$keykey];
$tmptmp[$key]['y'][$keykey]['2'] = $Y[$valuevalue];
}
}
foreach($tmptmp as $tmptmpkey => $tmptmpvalue)
{
$xkey = array_rand($tmptmpvalue['x']);
$yKey = array_rand($tmptmpvalue['y']);
$resultArr[$tmptmpkey]['x'] = $tmptmpvalue['x'][$xkey];
$resultArr[$tmptmpkey]['y'] = $tmptmpvalue['y'][$yKey];
}
$resultString = '';
foreach($resultArr as $resultArrkey => $resultArrValue)
{
$resultString .= $resultArrValue['x'][2].$resultArrValue['y'][2].$resultArrValue['x'][1].$resultArrValue['y'][1];
}
return $resultString;
}
function getArr($max, $value)
{
for($i=$max;$i>=$value;$i--)
{
$tmp[$i] = $i - $value;
}
return $tmp;
}