




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C#MD5加密的幾種方法管理提醒:本帖被gaolei2016執(zhí)行加亮操作(2010-01-21)MD5加密是在網(wǎng)站開發(fā)經(jīng)常使用到的加密方案。在這里介紹幾種MD5的幾種方法。1、中,MS有一套專用的加密使用方法:/code為加密位數(shù),16和32publicstaticstringMd5(stringstr,intcode)/str=System.Web.HttpUtility.UrlEncode(str);if(code=16)/16位MD5加密(取32位加密的925字符)returnreturnSystem.Web.Security.FormsAuthentication.HashPasswo
2、rdForStoringInConfigFile(str,"MD5").ToLower().Substring(8,16);else/32位加密System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5").ToLower();2、MSDN的案例:/*/<summary>/MD5加密/</summary>/<paramname="str"></param>/<returns&
3、gt;</returns>publicstaticstringMd5(stringstr)/CreateanewinstanceoftheMD5CryptoServiceProviderobject.MD5md5Hasher=MD5.Create();/Converttheinputstringtoabytearrayandcomputethehash.bytedata=md5Hasher.ComputeHash(Encoding.GetEncoding("UTF-8").GetBytes(str);/returnBitConverter.ToString(da
4、ta);/可以直接使用這個方法/CreateanewStringbuildertocollectthebytes/andcreateastring.StringBuildersBuilder=newStringBuilder();/Loopthrougheachbyteofthehasheddata/andformateachoneasahexadecimalstring.for(inti=0;i<data.Length;i+)sBuilder.Append(data.ToString("x2");/Returnthehexadecimalstring.returns
5、Builder.ToString();3、在使用淘寶API時,淘寶提供的一個方法/<summary>/MD5加密并輸出十六進(jìn)制字符串/</summary>/<paramname="str"></param>/<returns></returns>publicstaticstringMd5Hex(stringstr)stringdest=""/實(shí)例化一個md5對像MD5md5=MD5.Create();/加密后是一個字節(jié)類型的數(shù)組,這里要注意編碼UTF8/Unicode等的選擇byte
6、s=md5.ComputeHash(Encoding.UTF8.GetBytes(str);/通過使用循環(huán),將字節(jié)類型的數(shù)組轉(zhuǎn)換為字符串,此字符串是常規(guī)字符格式化所得for(inti=0;i<s.Length;i+)/將得到的字符串使用十六進(jìn)制類型格式。格式后的字符是大寫的字母if(s<16)dest=dest+"0"+s.ToString("X");elsedest=dest+s.ToString("X");returndest;以上2、3中對于中文有編碼問題,上面的案例為UTF-8編碼,1中其實(shí)也有編碼的問題,但是那個
7、主要是與當(dāng)前頁面的編碼有關(guān)系,即使用默認(rèn)編碼的方式。4、自己實(shí)現(xiàn)MD5類:usingSystem;usingSystem.Text;namespaceEncrypter/<summary>/SummarydescriptionforMD5./</summary>publicclassMD5constintBITS_TO_A_BYTE=8;constintBYTES_TO_A_WORD=4;constintBITS_TO_A_WORD=32;privatestaticlongm_lOnBits=newlong30+1;privatestaticlongm_l2Power=
8、newlong30+1;privatestaticlongLShift(longlValue,longiShiftBits)longLShift=0;if(iShiftBits=0)LShift=lValue;returnLShift;elseif(iShiftBits=31)if(Convert.ToBoolean(lValue&1)LShift=0x80000000;elseLShift=0;returnLShift;elseif(iShiftBits<0|iShiftBits>31)/Err.Raise6;if(Convert.ToBoolean(lValue&
9、;m_l2Power31-iShiftBits)LShift=(lValue&m_lOnBits31-(iShiftBits+1)*m_l2PoweriShiftBits)|0x80000000;elseLShift=(lValue&m_lOnBits31-iShiftBits)*m_l2PoweriShiftBits);returnLShift;privatestaticlongRShift(longlValue,longiShiftBits)longRShift=0;if(iShiftBits=0)RShift=lValue;returnRShift;elseif(iShi
10、ftBits=31)if(Convert.ToBoolean(lValue&0x80000000)RShift=1;elseRShift=0;returnRShift;elseif(iShiftBits<0|iShiftBits>31)/Err.Raise6;RShift=(lValue&0x7FFFFFFE)/m_l2PoweriShiftBits;if(Convert.ToBoolean(lValue&0x80000000)RShift=(RShift|(0x40000000/m_l2PoweriShiftBits-1);returnRShift;pri
11、vatestaticlongRotateLeft(longlValue,longiShiftBits)longRotateLeft=0;RotateLeft=LShift(lValue,iShiftBits)|RShift(lValue,(32-iShiftBits);returnRotateLeft;privatestaticlongAddUnsigned(longlX,longlY)longAddUnsigned=0;longlX4=0;longlY4=0;longlX8=0;longlY8=0;longlResult=0;lX8=lX&0x80000000;lY8=lY&
12、0x80000000;lX4=lX&0x40000000;lY4=lY&0x40000000;lResult=(lX&0x3FFFFFFF)+(lY&0x3FFFFFFF);if(Convert.ToBoolean(lX4&lY4)IResult=IResultA0x80000000A1X8AIY8;elseif(Convert.ToBoolean(lX4|lY4)if(Convert.ToBoolean(lResult&0x40000000)lResult=lResultA0xC0000000AlX8AlY8;elselResult=lResu
13、ltA0x40000000AlX8AlY8;elselResult=lResultAlX8AlY8;AddUnsigned=lResult;returnAddUnsigned;privatestaticlongmd5_F(longx,longy,longz)longmd5_F=0;md5_F=(x&y)|(x)&z);returnmd5_F;privatestaticlongmd5_G(longx,longy,longz)longmd5_G=0;md5_G=(x&z)|(y&(z);returnmd5_G;privatestaticlongmd5_H(longx
14、,longy,longz)longmd5_H=0;md5_H=(xAyAz);returnmd5_H;privatestaticlongmd5_I(longx,longy,longz)longmd5_I=0;md5_I=(yA(x|(z);returnmd5_I;privatestaticvoidmd5_FF(reflonga,longb,longc,longd,longx,longs,longac)a=AddUnsigned(a,AddUnsigned(AddUnsigned(md5_F(b,c,d),x),ac);a=RotateLeft(a,s);a=AddUnsigned(a,b);p
15、rivatestaticvoidmd5_GG(reflonga,longb,longc,longd,longx,longs,longac)a=AddUnsigned(a,AddUnsigned(AddUnsigned(md5_G(b,c,d),x),ac);a=RotateLeft(a,s);a=AddUnsigned(a,b);privatestaticvoidmd5_HH(reflonga,longb,longc,longd,longx,longs,longac)a=AddUnsigned(a,AddUnsigned(AddUnsigned(md5_H(b,c,d),x),ac);a=Ro
16、tateLeft(a,s);a=AddUnsigned(a,b);privatestaticvoidmd5_II(reflonga,longb,longc,longd,longx,longs,longac)a=AddUnsigned(a,AddUnsigned(AddUnsigned(md5_I(b,c,d),x),ac);a=RotateLeft(a,s);a=AddUnsigned(a,b);privatestaticlongConvertToWordArray(stringsMessage)longConvertToWordArray=null;intlMessageLength=0;i
17、ntlNumberOfWords=0;longlWordArray=null;intlBytePosition=0;intlByteCount=0;intlWordCount=0;constintMODULUS_BITS=512;constintCONGRUENT_BITS=448;lMessageLength=sMessage.Length;lNumberOfWords=(lMessageLength+(MODULUS_BITS-CONGRUENT_BITS)/BITS_TO_A_BYTE)/(MODULUS_BITS/BITS_TO_A_BYTE)+1)*(MODULUS_BITS/BIT
18、S_TO_A_WORD);lWordArray=newlonglNumberOfWords;lBytePosition=0;lByteCount=0;while(lByteCount<lMessageLength)lWordCount=lByteCount/BYTES_TO_A_WORD;lBytePosition=(lByteCount%BYTES_TO_A_WORD)*BITS_TO_A_BYTE;lWordArraylWordCount=lWordArraylWordCount|LShift(Convert.ToByte(sMessage.Substring(lByteCount,
19、1).ToCharArray()0),lBytePosition);lByteCount=lByteCount+1;lWordCount=lByteCount/BYTES_TO_A_WORD;lBytePosition=(lByteCount%BYTES_TO_A_WORD)*BITS_TO_A_BYTE;lWordArraylWordCount=lWordArraylWordCount|LShift(0x80,lBytePosition);lWordArraylNumberOfWords-2=LShift(lMessageLength,3);lWordArraylNumberOfWords-
20、1=RShift(lMessageLength,29);ConvertToWordArray=lWordArray;returnConvertToWordArray;privatestaticstringWordToHex(longlValue)stringWordToHex=""longlByte=0;intlCount=0;for(lCount=0;lCount<=3;lCount+)lByte=RShift(lValue,lCount*BITS_TO_A_BYTE)&m_lOnBitsBITS_TO_A_BYTE-1;WordToHex=WordToHe
21、x+("0"+ToHex(lByte).Substring("0"+ToHex(lByte).Length-2);returnWordToHex;privatestaticstringToHex(longdec)stringstrhex=""while(dec>0)strhex=tohex(dec%16)+strhex;dec=dec/16;returnstrhex;privatestaticstringtohex(longhex)stringstrhex=""switch(hex)case10:strhex
22、="a"break;case11:strhex="b"break;case12:strhex="c"break;case13:strhex="d"break;case14:strhex="e"break;case15:strhex="f"break;default:strhex=hex.ToString();break;returnstrhex;publicstaticstringEncrypt(stringsMessage,intstype)stringMD5="
23、"for(inti=0;i<=30;i+)m_lOnBits=Convert.ToInt64(Math.Pow(2,i+1)-1);m_l2Power=Convert.ToInt64(Math.Pow(2,i);longx=null;intk=0;longAA=0;longBB=0;longCC=0;longDD=0;longa=0;longb=0;longc=0;longd=0;constintS11=7;constintS12=12;constintS13=17;constintS14=22;constintS21=5;constintS22=9;constintS23=1
24、4;constintS24=20;constintS31=4;constintS32=11;constintS33=16;constintS34=23;constintS41=6;constintS42=10;constintS43=15;constintS44=21;x=ConvertToWordArray(sMessage);a=0x67452301;b=0xEFCDAB89;c=0x98BADCFE;d=0x10325476;for(k=0;k<x.Length;k+=16)AA=a;BB=b;CC=c;DD=d;md5_FF(refa,b,c,d,xk+0,S11,0xD76AA
25、478);md5_FF(refd,a,b,c,xk+1,S12,0xE8C7B756);md5_FF(refc,d,a,b,xk+2,S13,0x242070DB);md5_FF(refb,c,d,a,xk+3,S14,0xC1BDCEEE);md5_FF(refa,b,c,d,xk+4,S11,0xF57C0FAF);md5_FF(refd,a,b,c,xk+5,S12,0x4787C62A);md5_FF(refc,d,a,b,xk+6,S13,0xA8304613);md5_FF(refb,c,d,a,xk+7,S14,0xFD469501);md5_FF(refa,b,c,d,xk+8
26、,S11,0x698098D8);md5_FF(refd,a,b,c,xk+9,S12,0x8B44F7AF);md5_FF(refc,d,a,b,xk+10,S13,0xFFFF5BB1);md5_FF(refb,c,d,a,xk+11,S14,0x895CD7BE);md5_FF(refa,b,c,d,xk+12,S11,0x6B901122);md5_FF(refd,a,b,c,xk+13,S12,0xFD987193);md5_FF(refc,d,a,b,xk+14,S13,0xA679438E);md5_FF(refb,c,d,a,xk+15,S14,0x49B40821);md5_
27、GG(refa,b,c,d,xk+1,S21,0xF61E2562);md5_GG(refd,a,b,c,xk+6,S22,0xC040B340);md5_GG(refc,d,a,b,xk+11,S23,0x265E5A51);md5_GG(refb,c,d,a,xk+0,S24,0xE9B6C7AA);md5_GG(refa,b,c,d,xk+5,S21,0xD62F105D);md5_GG(refd,a,b,c,xk+10,S22,0x2441453);md5_GG(refc,d,a,b,xk+15,S23,0xD8A1E681);md5_GG(refb,c,d,a,xk+4,S24,0x
28、E7D3FBC8);md5_GG(refa,b,c,d,xk+9,S21,0x21E1CDE6);md5_GG(refd,a,b,c,xk+14,S22,0xC33707D6);md5_GG(refc,d,a,b,xk+3,S23,0xF4D50D87);md5_GG(refb,c,d,a,xk+8,S24,0x455A14ED);md5_GG(refa,b,c,d,xk+13,S21,0xA9E3E905);md5_GG(refd,a,b,c,xk+2,S22,0xFCEFA3F8);md5_GG(refc,d,a,b,xk+7,S23,0x676F02D9);md5_GG(refb,c,d
29、,a,xk+12,S24,0x8D2A4C8A);md5_HH(refa,b,c,d,xk+5,S31,0xFFFA3942);md5_HH(refd,a,b,c,xk+8,S32,0x8771F681);md5_HH(refc,d,a,b,xk+11,S33,0x6D9D6122);md5_HH(refb,c,d,a,xk+14,S34,0xFDE5380C);md5_HH(refa,b,c,d,xk+1,S31,0xA4BEEA44);md5_HH(refd,a,b,c,xk+4,S32,0x4BDECFA9);md5_HH(refc,d,a,b,xk+7,S33,0xF6BB4B60);md5_HH(refb,c,d,a,xk+10,S34,0xBEBFBC70);md5_HH(refa,b,c,d,xk+13,S31,0x289B7EC6);md5_HH(refd,a,b,c,xk+0,S32,0xEAA127FA);md5_HH(refc,d,a,b,xk+3,S33,0xD4EF3085);md5_HH(refb,c,d,a,xk+6,S34,0x4881D05);md5_HH(refa,b,c,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)形象推廣策劃合同范例
- 刮瓷粉合同范本
- 保底買斷合同范本
- 人力資源就業(yè)服務(wù)合同范例
- 中介公司終止服務(wù)合同范例
- 農(nóng)民交糧交租合同范例
- 公用汽車維修合同范例
- 做舊墻面工程合同范例
- 農(nóng)家樂合同范例
- 買賣牛合同范例
- 2017華東六省一市優(yōu)質(zhì)課課件連乘問題11月29日
- 部編版(統(tǒng)編)一年級語文下冊每課練習(xí)題(全冊全套)
- DB62∕T 4134-2020 高速公路服務(wù)區(qū)設(shè)計規(guī)范
- 中電朝陽250兆瓦智慧風(fēng)儲一體化風(fēng)電項目環(huán)評報告書
- 做一個幸福教師
- 海上風(fēng)電場+風(fēng)機(jī)基礎(chǔ)介紹
- 國家自然科學(xué)基金申請標(biāo)書模板
- GB T 20219-2015 絕熱用噴涂硬質(zhì)聚氨酯泡沫塑料(高清版)
- 車間斷針記錄表
- 人人有事做事事有人做
- MT_T 693-2019-礦用無線電波透視儀通用技術(shù)條件_(高清版)
評論
0/150
提交評論