|
中级会员

- 帖子
- 70
- 威望
- 74 点
- 金钱
- 200 元
- 好评
- 1 点
|
1楼
大 中
小 发表于 2008-5-9 18:57 只看该作者
帮我 逆转一下加密过程 (申请版主赐教^O^)
搞了一批加密密码,对php一点都不懂,希望高手帮我逆转一下。
这是加密的过程
<?
function checkpass($pass,$crypted)
{
if ($crypted[0] == '{')
{
for ($i=1;$i<(strlen($crypted)-1);$i++)
{
if ($crypted[$i] == '}')
break;
$scheme[$i-1] = $crypted[$i];
}
if ($crypted[$i] != '}')
return -1;
$i++;
for($j=0;$i<strlen($crypted);$i++,$j++)
{
$cryptpass[$j]=$crypted[$i];
}
$scheme = join("",$scheme);
$cryptpass = join("",$cryptpass);
}
else
{
$scheme = "";
$cryptpass = $crypted;
}
$scheme = strtolower($scheme);
if ($scheme == "md5")
{
if ($cryptpass != crypt($pass,$cryptpass))
{
if ($cryptpass != ldap_md5($pass))
return -1;
else
return 0;
}
else
return 0;
}
else if ($scheme == "des")
{
if ($cryptpass != crypt($pass,$cryptpass))
return -1;
else
return 0;
}
else if ($scheme == "crypt")
{
if ($cryptpass != crypt($pass,$cryptpass))
return -1;
else
return 0;
}
else if ($scheme == "sha")
{
if ($cryptpass != shapass($pass))
return -1;
else
return 0;
}
else if ($scheme == "password") {
if ($cryptpass != mysql_password($pass)){
return -1;
}
else
return 0;
}
else if ($scheme == "clear"||$scheme == "") {
if ($cryptpass != $pass)
return -1;
else
return 0;
}
//其他的加密方式应该放在这里
else
{
if ($cryptpass != crypt($pass,$cryptpass))
{
if ($cryptpass != ldap_md5($pass))
return -1;
else
return 0;
}
else
return 0;
}
}
function mysql_password($password)
{
$nr = 1345345333;
$add = 7;
$nr2 = 0x12345671;
for ($i=0; $i<strlen($password); $i++) {
if ($password[$i] == ' ' || $password[$i] == '\t')
continue;
$tmp = ord($password[$i]);
$nr ^= (($nr & 63)+$add)*$tmp + ($nr << 8);
$nr2 += ($nr2 << 8) ^ $nr;
$add += $tmp;
}
$h1 = $nr & (1<<31) - 1;
$h2 = $nr2 & (1<<31) - 1;
return sprintf("%08lx%08lx", $h1, $h2);
}
function contextto64md5($string)
{
$string = $string."0000";
$len=strlen($string);
if($len != 36){
return false;
}
$ito64= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
$i=0;
$s="1234567890123456789012";
$len=0;
while($len<36)
{
$t="************";
for($j=0;$j<6;$j++)
$t[$j]=$string[$len+$j];
$t = hexdec($t);
$p[2]=$t & 0xff;
$p[1]=($t >> 8) & 0xff;
$p[0]=($t >> 16) & 0xff;
$s[$i++]=$ito64[$p[0] >> 2];
$s[$i++]=$ito64[(($p[0] & 0x3)<<4) |(($p[1] & 0xf0)>>4)];
$s[$i++]=$ito64[(($p[1] & 0xf)<<2) |(($p[2] & 0xc0)>>6)];
$s[$i++]=$ito64[($p[2] & 0x3f)];
$len+=6;
}
$s[$i--];
$s[$i--]='=';
$s[$i--]='=';
return $s;
}
function contextto64sha($string)
{
$string = $string."00";
$len=strlen($string);
if($len != 42){
return false;
}
$ito64= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
$i=0;
$s="1234567890123456789012";
$len=0;
while($len<42)
{
$t="************";
for($j=0;$j<6;$j++)
$t[$j]=$string[$len+$j];
$t = hexdec($t);
$p[2]=$t & 0xff;
$p[1]=($t >> 8) & 0xff;
$p[0]=($t >> 16) & 0xff;
$s[$i++]=$ito64[$p[0] >> 2];
$s[$i++]=$ito64[(($p[0] & 0x3)<<4) |(($p[1] & 0xf0)>>4)];
$s[$i++]=$ito64[(($p[1] & 0xf)<<2) |(($p[2] & 0xc0)>>6)];
$s[$i++]=$ito64[($p[2] & 0x3f)];
$len+=6;
}
$s[$i--];
$s[$i--]='=';
return $s;
}
function shapass($pass)
{
$sha = new SHA;
$hasharray = $sha->hash_string($pass);
$hash = $sha->hash_to_string($hasharray);
return contextto64sha($hash);
}
function ldap_md5($pass)
{
$hash = md5($pass);
$md5ed = contextto64md5($hash);
return $md5ed;
}
function eyou_crypt($pass)
{
$temp = strtolower($pass);
if ($temp == strstr($temp,"{md5}"))
return $pass;
else if ($temp == strstr($temp,"{crypt}"))
return $pass;
else if ($temp == strstr($temp,"{des}"))
return $pass;
else if ($temp == strstr($temp,"{sha}"))
return $pass;
else if ($temp == strstr($temp,"{password}"))
return $pass;
$mysql_hd = eyousql_open();
$result = eyousql_query("select conf_value from e_system_config where conf_name='password-hash'", $mysql_hd);
$row = eyousql_fetch_array($result);
if ( null == $row || "md5" == strtolower($row[0]))
return "{md5}".ldap_md5($pass);
else if ("sha" == strtolower($row[0]))
return "{sha}".shapass($pass);
else if ("des" == strtolower($row[0]))
return "{des}".crypt($pass);
else if ("crypt" == strtolower($row[0]))
return "{crypt}".crypt($pass);
else if ("password" == strtolower($row[0]))
return "{password}".mysql_password($pass);
else if ("clear" == strtolower($row[0]))
return "{clear}".$pass;
else
return "{md5}".ldap_md5($pass);
}
?>
这是加密后的秘密:4FfzweA+VgIHIHXKEtQkVQ==@
把还原的方案写一下吧
|