首頁 後端開發 php教程 用PHP写的MD5加密函数_PHP

用PHP写的MD5加密函数_PHP

Jun 01, 2016 pm 12:34 PM
intval 函數 加密

用PHP写的MD5加密函数

//php_md5("字符串")
define("BITS_TO_A_BYTE",8);
define("BYTES_TO_A_WORD",4);
define("BITS_TO_A_WORD",32);
$m_lOnBits=array(30);
$m_l2Power=array(30);

function LShift($lValue,$iShiftBits)
{
        if ($iShiftBits==0) return $lValue;
        if ($iShiftBits==31)
        {
                if ($lValue&1) { return 0x80000000; }
                else { return 0; }
        }
        if ($iShiftBits 31) { }
        if (($lValue&$GLOBALS[31-$iShiftBits]))
        {        $tmpstr=(($lValue&$GLOBALS[31-($iShiftBits+1)])*$GLOBALS[$iShiftBits])|0x80000000; }
        else
        { $tmpstr=(($lValue&$GLOBALS[31-$iShiftBits])*$GLOBALS[$iShiftBits]); }
        return $tmpstr;
}

function RShift($lValue,$iShiftBits)
{
        if ($iShiftBits==0)return $lValue;
        if ($iShiftBits==31)
        {
                if ($lValue&0x80000000) { return 1; }
                else { return 0; }
        }
        if ($iShiftBits31) { }
        $tmpstr=floor(($lValue&0x7FFFFFFE)/$GLOBALS[$iShiftBits]);
        if ($lValue&0x80000000) { $tmpstr=$tmpstr|floor(0x40000000/$GLOBALS[$iShiftBits-1]); }
        return $tmpstr;
}

function RotateLeft($lValue,$iShiftBits)
{
        return LShift($lValue,$iShiftBits)|RShift($lValue,(32-$iShiftBits));
}

function AddUnsigned($lX,$lY)
{
        $lX8=$lX&0x80000000;
        $lY8=$lY&0x80000000;
        $lX4=$lX&0x40000000;
        $lY4=$lY&0x40000000;
        $lResult=($lX&0x3FFFFFFF)+($lY&0x3FFFFFFF);

        if ($lX4&$lY4) { $lResult=$lResult^0x80000000^$lX8^$lY8; }
        if ($lX4|$lY4)
        {
                if ($lResult&0x40000000)
                { $lResult=$lResult^0xC0000000^$lX8^$lY8; }
                else
                { $lResult=$lResult^0x40000000^$lX8^$lY8; }
        }
        else
        { $lResult=$lResult^$lX8^$lY8; }
        return $lResult;
}

function md5_F($x,$y,$z)
{
        return ($x&$y)|((~$x)&$z);
}

function md5_G($x,$y,$z)
{
        return ($x&$z)|($y&(~$z));
}

function md5_H($x,$y,$z)
{
        return ($x^$y^$z);
}

function md5_I($x,$y,$z)
{
        return ($y^($x|(~$z)));
}

function md5_FF(&$a,$b,$c,$d,$x,$s,$ac)
{
        $a=AddUnsigned($a,AddUnsigned(AddUnsigned(md5_F($b,$c,$d),$x),$ac));
        $a=RotateLeft($a,$s);
        $a=AddUnsigned($a,$b);
}

function md5_GG(&$a,$b,$c,$d,$x,$s,$ac)
{
        $a=AddUnsigned($a,AddUnsigned(AddUnsigned(md5_G($b,$c,$d),$x),$ac));
        $a=RotateLeft($a,$s);
        $a=AddUnsigned($a,$b);
}

function md5_HH(&$a,$b,$c,$d,$x,$s,$ac)
{
        $a=AddUnsigned($a,AddUnsigned(AddUnsigned(md5_H($b,$c,$d),$x),$ac));
        $a=RotateLeft($a,$s);
        $a=AddUnsigned($a,$b);
}

function md5_II(&$a,$b,$c,$d,$x,$s,$ac)
{
        $a=AddUnsigned($a,AddUnsigned(AddUnsigned(md5_I($b,$c,$d),$x),$ac));
        $a=RotateLeft($a,$s);
        $a=AddUnsigned($a,$b);
}

function ConvertToWordArray($sMessage)
{
        $lWordArray=array();
        $MODULUS_BITS=512;
        $CONGRUENT_BITS=448;
        $lMessageLength=strlen($sMessage);
        $lNumberOfWords=(floor(($lMessageLength+floor(($MODULUS_BITS-$CONGRUENT_BITS)/BITS_TO_A_BYTE))/floor($MODULUS_BITS/BITS_TO_A_BYTE))+1)*floor($MODULUS_BITS/BITS_TO_A_WORD);
        $lBytePosition=0;
        $lByteCount=0;
        while(!($lByteCount>=$lMessageLength))
        {
                $lWordCount=floor($lByteCount/BYTES_TO_A_WORD);
                $lBytePosition=($lByteCount%BYTES_TO_A_WORD)*BITS_TO_A_BYTE;
                $lWordArray[$lWordCount]=$lWordArray[$lWordCount]|LShift(ord(substr($sMessage,$lByteCount+1-1,1)),$lBytePosition);
                $lByteCount=$lByteCount+1;
        }
        $lWordCount=floor($lByteCount/BYTES_TO_A_WORD);
        $lBytePosition=($lByteCount%BYTES_TO_A_WORD)*BITS_TO_A_BYTE;
        $lWordArray[$lWordCount]=$lWordArray[$lWordCount]|LShift(0x80,$lBytePosition);
        $lWordArray[$lNumberOfWords-2]=LShift($lMessageLength,3);
        $lWordArray[$lNumberOfWords-1]=RShift($lMessageLength,29);
        return $lWordArray;
}

function WordToHex($lValue)
{
        $tmpstr="";
        for ($lCount=0; $lCount        {
                $lByte=RShift($lValue,$lCount*BITS_TO_A_BYTE)&$GLOBALS[BITS_TO_A_BYTE-1];
                $tmpstr=$tmpstr.(substr("0".dechex($lByte),strlen("0".dechex($lByte))-2));//这行可能有问题
        }
        return $tmpstr;
}
function php_MD5($sMessage)
{
        $GLOBALS[0]=intval(1);
        $GLOBALS[1]=intval(3);
        $GLOBALS[2]=intval(7);
        $GLOBALS[3]=intval(15);
        $GLOBALS[4]=intval(31);
        $GLOBALS[5]=intval(63);
        $GLOBALS[6]=intval(127);
        $GLOBALS[7]=intval(255);
        $GLOBALS[8]=intval(511);
        $GLOBALS[9]=intval(1023);
        $GLOBALS[10]=intval(2047);
        $GLOBALS[11]=intval(4095);
        $GLOBALS[12]=intval(8191);
        $GLOBALS[13]=intval(16383);
        $GLOBALS[14]=intval(32767);
        $GLOBALS[15]=intval(65535);
        $GLOBALS[16]=intval(131071);
        $GLOBALS[17]=intval(262143);
        $GLOBALS[18]=intval(524287);
        $GLOBALS[19]=intval(1048575);
        $GLOBALS[20]=intval(2097151);
        $GLOBALS[21]=intval(4194303);
        $GLOBALS[22]=intval(8388607);
        $GLOBALS[23]=intval(16777215);
        $GLOBALS[24]=intval(33554431);
        $GLOBALS[25]=intval(67108863);
        $GLOBALS[26]=intval(134217727);
        $GLOBALS[27]=intval(268435455);
        $GLOBALS[28]=intval(536870911);
        $GLOBALS[29]=intval(1073741823);
        $GLOBALS[30]=intval(2147483647);

        $GLOBALS[0]=intval(1);
        $GLOBALS[1]=intval(2);
        $GLOBALS[2]=intval(4);
        $GLOBALS[3]=intval(8);
        $GLOBALS[4]=intval(16);
        $GLOBALS[5]=intval(32);
        $GLOBALS[6]=intval(64);
        $GLOBALS[7]=intval(128);
        $GLOBALS[8]=intval(256);
        $GLOBALS[9]=intval(512);
        $GLOBALS[10]=intval(1024);
        $GLOBALS[11]=intval(2048);
        $GLOBALS[12]=intval(4096);
        $GLOBALS[13]=intval(8192);
        $GLOBALS[14]=intval(16384);
        $GLOBALS[15]=intval(32768);
        $GLOBALS[16]=intval(65536);
        $GLOBALS[17]=intval(131072);
        $GLOBALS[18]=intval(262144);
        $GLOBALS[19]=intval(524288);
        $GLOBALS[20]=intval(1048576);
        $GLOBALS[21]=intval(2097152);
        $GLOBALS[22]=intval(4194304);
        $GLOBALS[23]=intval(8388608);
        $GLOBALS[24]=intval(16777216);
        $GLOBALS[25]=intval(33554432);
        $GLOBALS[26]=intval(67108864);
        $GLOBALS[27]=intval(134217728);
        $GLOBALS[28]=intval(268435456);
        $GLOBALS[29]=intval(536870912);
        $GLOBALS[30]=intval(1073741824);

        $S11=7;
        $S12=12;
        $S13=17;
        $S14=22;
        $S21=5;
        $S22=9;
        $S23=14;
        $S24=20;
        $S31=4;
        $S32=11;
        $S33=16;
        $S34=23;
        $S41=6;
        $S42=10;
        $S43=15;
        $S44=21;

        $x=ConvertToWordArray($sMessage);

        $a=0x67452301;
        $b=0xEFCDAB89;
        $c=0x98BADCFE;
        $d=0x10325476;

        for ($k=0; $k        {
                $AA=$a;
                $BB=$b;
                $CC=$c;
                $DD=$d;
                md5_FF($a,$b,$c,$d,$x[$k+0],$S11,0xD76AA478);
        md5_FF($d,$a,$b,$c,$x[$k+1],$S12,0xE8C7B756);
        md5_FF($c,$d,$a,$b,$x[$k+2],$S13,0x242070DB);
        md5_FF($b,$c,$d,$a,$x[$k+3],$S14,0xC1BDCEEE);
        md5_FF($a,$b,$c,$d,$x[$k+4],$S11,0xF57C0FAF);
        md5_FF($d,$a,$b,$c,$x[$k+5],$S12,0x4787C62A);
        md5_FF($c,$d,$a,$b,$x[$k+6],$S13,0xA8304613);
        md5_FF($b,$c,$d,$a,$x[$k+7],$S14,0xFD469501);
        md5_FF($a,$b,$c,$d,$x[$k+8],$S11,0x698098D8);
        md5_FF($d,$a,$b,$c,$x[$k+9],$S12,0x8B44F7AF);
        md5_FF($c,$d,$a,$b,$x[$k+10],$S13,0xFFFF5BB1);
        md5_FF($b,$c,$d,$a,$x[$k+11],$S14,0x895CD7BE);
        md5_FF($a,$b,$c,$d,$x[$k+12],$S11,0x6B901122);
        md5_FF($d,$a,$b,$c,$x[$k+13],$S12,0xFD987193);
        md5_FF($c,$d,$a,$b,$x[$k+14],$S13,0xA679438E);
        md5_FF($b,$c,$d,$a,$x[$k+15],$S14,0x49B40821);

        md5_GG($a,$b,$c,$d,$x[$k+1],$S21,0xF61E2562);
        md5_GG($d,$a,$b,$c,$x[$k+6],$S22,0xC040B340);
        md5_GG($c,$d,$a,$b,$x[$k+11],$S23,0x265E5A51);
        md5_GG($b,$c,$d,$a,$x[$k+0],$S24,0xE9B6C7AA);
        md5_GG($a,$b,$c,$d,$x[$k+5],$S21,0xD62F105D);
        md5_GG($d,$a,$b,$c,$x[$k+10],$S22,0x2441453);
        md5_GG($c,$d,$a,$b,$x[$k+15],$S23,0xD8A1E681);
        md5_GG($b,$c,$d,$a,$x[$k+4],$S24,0xE7D3FBC8);
        md5_GG($a,$b,$c,$d,$x[$k+9],$S21,0x21E1CDE6);
        md5_GG($d,$a,$b,$c,$x[$k+14],$S22,0xC33707D6);
        md5_GG($c,$d,$a,$b,$x[$k+3],$S23,0xF4D50D87);
        md5_GG($b,$c,$d,$a,$x[$k+8],$S24,0x455A14ED);
        md5_GG($a,$b,$c,$d,$x[$k+13],$S21,0xA9E3E905);
        md5_GG($d,$a,$b,$c,$x[$k+2],$S22,0xFCEFA3F8);
        md5_GG($c,$d,$a,$b,$x[$k+7],$S23,0x676F02D9);
        md5_GG($b,$c,$d,$a,$x[$k+12],$S24,0x8D2A4C8A);

        md5_HH($a,$b,$c,$d,$x[$k+5],$S31,0xFFFA3942);
        md5_HH($d,$a,$b,$c,$x[$k+8],$S32,0x8771F681);
        md5_HH($c,$d,$a,$b,$x[$k+11],$S33,0x6D9D6122);
        md5_HH($b,$c,$d,$a,$x[$k+14],$S34,0xFDE5380C);
        md5_HH($a,$b,$c,$d,$x[$k+1],$S31,0xA4BEEA44);
        md5_HH($d,$a,$b,$c,$x[$k+4],$S32,0x4BDECFA9);
        md5_HH($c,$d,$a,$b,$x[$k+7],$S33,0xF6BB4B60);
        md5_HH($b,$c,$d,$a,$x[$k+10],$S34,0xBEBFBC70);
        md5_HH($a,$b,$c,$d,$x[$k+13],$S31,0x289B7EC6);
        md5_HH($d,$a,$b,$c,$x[$k+0],$S32,0xEAA127FA);
        md5_HH($c,$d,$a,$b,$x[$k+3],$S33,0xD4EF3085);
        md5_HH($b,$c,$d,$a,$x[$k+6],$S34,0x4881D05);
        md5_HH($a,$b,$c,$d,$x[$k+9],$S31,0xD9D4D039);
        md5_HH($d,$a,$b,$c,$x[$k+12],$S32,0xE6DB99E5);
        md5_HH($c,$d,$a,$b,$x[$k+15],$S33,0x1FA27CF8);
        md5_HH($b,$c,$d,$a,$x[$k+2],$S34,0xC4AC5665);

        md5_II($a,$b,$c,$d,$x[$k+0],$S41,0xF4292244);
        md5_II($d,$a,$b,$c,$x[$k+7],$S42,0x432AFF97);
        md5_II($c,$d,$a,$b,$x[$k+14],$S43,0xAB9423A7);
        md5_II($b,$c,$d,$a,$x[$k+5],$S44,0xFC93A039);
        md5_II($a,$b,$c,$d,$x[$k+12],$S41,0x655B59C3);
        md5_II($d,$a,$b,$c,$x[$k+3],$S42,0x8F0CCC92);
        md5_II($c,$d,$a,$b,$x[$k+10],$S43,0xFFEFF47D);
        md5_II($b,$c,$d,$a,$x[$k+1],$S44,0x85845DD1);
        md5_II($a,$b,$c,$d,$x[$k+8],$S41,0x6FA87E4F);
        md5_II($d,$a,$b,$c,$x[$k+15],$S42,0xFE2CE6E0);
        md5_II($c,$d,$a,$b,$x[$k+6],$S43,0xA3014314);
        md5_II($b,$c,$d,$a,$x[$k+13],$S44,0x4E0811A1);
        md5_II($a,$b,$c,$d,$x[$k+4],$S41,0xF7537E82);
        md5_II($d,$a,$b,$c,$x[$k+11],$S42,0xBD3AF235);
        md5_II($c,$d,$a,$b,$x[$k+2],$S43,0x2AD7D2BB);
        md5_II($b,$c,$d,$a,$x[$k+9],$S44,0xEB86D391);
                $a=AddUnsigned($a,$AA);
                $b=AddUnsigned($b,$BB);
                $c=AddUnsigned($c,$CC);
                $d=AddUnsigned($d,$DD);
        }
        return strtolower(WordToHex($a).WordToHex($b).WordToHex($c).WordToHex($d));
}

$aaa=php_MD5("sdfasdf");
echo $aaa;

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

golang函數動態建立新函數的技巧 golang函數動態建立新函數的技巧 Apr 25, 2024 pm 02:39 PM

Go語言提供了兩種動態函數創建技術:closures和反射。 closures允許存取閉包作用域內的變量,而反射可使用FuncOf函數建立新函數。這些技術在自訂HTTP路由器、實現高度可自訂的系統和建置可插拔的元件方面非常有用。

C++ 函數命名中參數順序的考慮 C++ 函數命名中參數順序的考慮 Apr 24, 2024 pm 04:21 PM

在C++函數命名中,考慮參數順序至關重要,可提高可讀性、減少錯誤並促進重構。常見的參數順序約定包括:動作-物件、物件-動作、語意意義和遵循標準函式庫。最佳順序取決於函數目的、參數類型、潛在混淆和語言慣例。

如何在Java中寫出高效和可維護的函數? 如何在Java中寫出高效和可維護的函數? Apr 24, 2024 am 11:33 AM

編寫高效且可維護的Java函數的關鍵在於:保持簡潔。使用有意義的命名。處理特殊情況。使用適當的可見性。

excel函數公式大全 excel函數公式大全 May 07, 2024 pm 12:04 PM

1. SUM函數,用於對一列或一組單元格中的數字進行求和,例如:=SUM(A1:J10)。 2、AVERAGE函數,用於計算一列或一組儲存格中的數字的平均值,例如:=AVERAGE(A1:A10)。 3.COUNT函數,用於計算一列或一組單元格中的數字或文字的數量,例如:=COUNT(A1:A10)4、IF函數,用於根據指定的條件進行邏輯判斷,並返回相應的結果。

C++ 函式異常進階:客製化錯誤處理 C++ 函式異常進階:客製化錯誤處理 May 01, 2024 pm 06:39 PM

C++中的異常處理可透過自訂異常類別增強,提供特定錯誤訊息、上下文資訊以及根據錯誤類型執行自訂操作。定義繼承自std::exception的異常類,提供特定的錯誤訊息。使用throw關鍵字拋出自訂異常。在try-catch區塊中使用dynamic_cast將捕獲到的異常轉換為自訂異常類型。在實戰案例中,open_file函數會拋出FileNotFoundException異常,捕捉並處理該異常可提供更具體的錯誤訊息。

Golang 函數接收 map 參數時的注意事項 Golang 函數接收 map 參數時的注意事項 Jun 04, 2024 am 10:31 AM

在Go中傳遞map給函數時,預設會建立副本,對副本的修改不影響原map。如果需要修改原始map,可透過指標傳遞。空map需小心處理,因為技術上是nil指針,傳遞空map給期望非空map的函數會發生錯誤。

gate.io安裝包免費拿 gate.io安裝包免費拿 Feb 21, 2025 pm 08:21 PM

Gate.io是一款受歡迎的加密貨幣交易所,用戶可通過下載其安裝包並安裝在設備上使用。獲取安裝包步驟如下:訪問Gate.io官方網站,點擊“下載”,選擇對應操作系統(Windows、Mac或Linux),將安裝包下載至計算機。安裝過程中建議暫時禁用殺毒軟件或防火牆,確保安裝順利。完成後,用戶需創建Gate.io賬戶以開始使用。

PHP 函數執行效率的魔法公式 PHP 函數執行效率的魔法公式 Apr 23, 2024 pm 10:21 PM

解决PHP函数执行低效率问题可遵循以下魔法公式:减少参数数量、使用按引用传递参数、缩短函数体长度、减少函数调用深度。实战案例:按引用传递参数可显著提高性能。最佳实践包括:避免不必要调用、使用缓存、分析性能瓶颈、遵循编码标准。

See all articles