function password(&$to,$size,$password )
{
$hash_res = array();
$nr = 45345333;
$add = 8;
$nr2 = 0x12345678;
$tmp = 0; if ( $size < 17 )
{
return -1;
}
for ($i=0; $i<strlen($password) ; $i++)
{
if ($password[$i] == ' ' || $password[$i] == "\t")
{
continue; /* skipp space in password */
}
$tmp= $password[$i];
$nr ^= ((($nr & 63)+$add)*$tmp)+ ($nr << 8);
$nr2 += ($nr2 << 8) ^ $nr;
$add += $tmp;
}
$hash_res[0] = $nr & ((1 << 31) -1); /* Don't use sign bit (str2int) */;
$hash_res[1] = $nr2 & ((1 << 31) -1);
$to = sprintf("%08x%08x",$hash_res[0],$hash_res[1]);
return 0;
}
{
$hash_res = array();
$nr = 45345333;
$add = 8;
$nr2 = 0x12345678;
$tmp = 0; if ( $size < 17 )
{
return -1;
}
for ($i=0; $i<strlen($password) ; $i++)
{
if ($password[$i] == ' ' || $password[$i] == "\t")
{
continue; /* skipp space in password */
}
$tmp= $password[$i];
$nr ^= ((($nr & 63)+$add)*$tmp)+ ($nr << 8);
$nr2 += ($nr2 << 8) ^ $nr;
$add += $tmp;
}
$hash_res[0] = $nr & ((1 << 31) -1); /* Don't use sign bit (str2int) */;
$hash_res[1] = $nr2 & ((1 << 31) -1);
$to = sprintf("%08x%08x",$hash_res[0],$hash_res[1]);
return 0;
}
对了,你那个nr^...不好意思,我的c很烂,也忘了好久
呵呵,php是不分那种变量的,目前
变量前面+$就可以了
剩下和c差不多,类的方面弱点
function password($to,$size,$password){
$long hash_res="";
$nr=45345333L;
$add=8;
$nr2=0x12345678L;
$tmp=0;
if($size<17){
return("-1");
}
for(;$password;$password++){
if ($password==''||$password=='\t'){
continue; /* skipp space in password */
}
$tmp=$password;
$nr^= ((($nr&63)+add)$tmp)+($nr<<8);
$nr2+=($nr2 << 8)^$nr;
$add+=$tmp;
}
$hash_res[0]=nr & (((unsigned long) 1L << 31) -1L); /* Don't use sign bit (str2int) */;
$hash_res[1]=nr2 & (((unsigned long) 1L << 31) -1L);
sprintf($to,"%08lx%08lx",$hash_res[0],$hash_res[1]);
return 0;
}