<?php
$var1;
$var2;
function strToBin($input)
{
global $var1;
global $var2;
$var1=0;
$l=strlen($input);
for($i=0;$i<$l;$i++)
{
$arr[$i]=ord($input[$i]);
}
for($i=0;$i<$l;$i++)
{
$ar2[$i]=sprintf("%08d",decbin($arr[$i]));
}
echo "<br><br>";
print_r($ar2);
echo "<br><br>";
$var1=implode($ar2);
echo "<br><br>";
$var2=strlen($var1);
echo strlen($var1);
}
function append()
{
global $var1;
global $var2;
if (strlen($var1)%448==strlen($var1))
{
pad(448-strlen($var1));
}
else if(strlen($var1)%448!=0)
{
pad(strlen($var1)%448);
echo "hello";
}
else if (strlen($var1)%448==1)
{
pad(1);
}
}
function pad($p)
{
echo "<br>";
echo $p;
global $var1;
if ($p==1)
{
$var1=$var1.(0b1);
}
else
{ $var1=$var1.(0b1);
for ($i=0;$i<$p-1;$i++)
{
$var1=$var1.(0b0);
}
}
echo "<br>";
echo $var1;
}
function add_len()
{
global $var1;
global $var2;
$h=sprintf("%08d",decbin($var2));
echo "<br>";
echo $h;
$len_h=strlen($h);
while(64-$len_h!=0)
{
$h=$h.(0b0);
$len_h++;
}
echo "<br><br>";
$addstr=implode(array_reverse(str_split($h,8)));
echo strlen($addstr);
$var1=$var1.$addstr;
echo "<br><br>";
echo strlen($var1);
}
function F($X, $Y, $Z)
{
$X = hexdec($X);
$Y = hexdec($Y);
$Z = hexdec($Z);
$calc = (($X & $Y) | ((~ $X) & $Z)); // X AND Y OR NOT X AND Z
return $calc;
}
function G($X, $Y, $Z)
{
$X = hexdec($X);
$Y = hexdec($Y);
$Z = hexdec($Z);
$calc = (($X & $Z) | ($Y & (~ $Z))); // X AND Z OR Y AND NOT Z
return $calc;
}
function H($X, $Y, $Z)
{
$X = hexdec($X);
$Y = hexdec($Y);
$Z = hexdec($Z);
$calc = ($X ^ $Y ^ $Z); // X XOR Y XOR Z
return $calc;
}
function I($X, $Y, $Z)
{
$X = hexdec($X);
$Y = hexdec($Y);
$Z = hexdec($Z);
$calc = ($Y ^ ($X | (~ $Z))) ; // Y XOR (X OR NOT Z)
return $calc;
}
function rotateL($a,$b)
{
return dechex(($a<<$b)|($a>>(32-$b)));
}
function md()
{
global $var1;
$g;
$cal;
$A0="67452301";
$B0="EFCDAB89";
$C0="98BADCFE";
$D0="10325476";
$s=array( 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22
,5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20
,4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23
,6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21);
print_r($s);
$k=array( 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee
,0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501
,0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be
,0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821
,0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa
,0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8
,0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed
,0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a
,0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c
,0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70
,0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05
,0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665
,0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039
,0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1
,0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1
,0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391);
$n=strlen($var1)/512;
$var3=str_split($var1,512);
for ($j=0;$j<$n;$j++)
{
$A=$A0;
$B=$B0;
$C=$C0;
$D=$D0;
$M=str_split($var3[$j],32);
for($i=0;$i<63;$i++)
{
if($i>=0&&$i<=15)
{
$cal=F($B,$C,$D);
$g=$i;
}
if($i>=16&&$i<=31)
{
$cal=G($B,$C,$D);
$g=(5*$i+1)%16;
}
if($i>=32&&$i<=47)
{
$cal=H($B,$C,$D);
$g=(3*$i+5)%16;
}
if($i>=48&&$i<=63)
{
$cal=I($B,$C,$D);
$g=(7*$i)%16;
}
$tempD=$D;
$D=$C;
$C=$B;
$B=$B+rotateL($A+$cal+hexdec($k[$i])+bindec($M[$g]),$s[$i]);//things
$A=$tempD;
}
$A0=hexdec($A0);
$B0=hexdec($B0);
$C0=hexdec($C0);
$D0=hexdec($D0);
$A=hexdec($A);
$B=hexdec($B);
$C=hexdec($C);
$D=hexdec($D);
$A0=$A0+$A;
$B0=$B0+$B;
$C0=$C0+$C;
$D0=$D0+$D;
$A0=dechex($A0);
$B0=dechex($B0);
$C0=dechex($C0);
$D0=dechex($D0);
$A=dechex($A);
$B=dechex($B);
$C=dechex($C);
$D=dechex($D);
}
$digest=$A0.$B0.$C0.$D0;
echo "<br><br>";
echo "The checksum is: ".$digest;
}
$st="hello world!";
echo $st;
echo "<br>";
strToBin($st);
append();
add_len();
echo "<br><br><br>";
md();
echo"<br><br><br>";
echo $var2;
?>
我得错了校验和。我确定我搞砸了md()函数。一些帮助将不胜感激。正确的校验和是=“fc3ff98e8c6a0d3087d515c0473f8677”。
我在PHP中制作MD5加密程序。代码运行正常,只是输出不正确。它看起来像一个逻辑错误。