加密C MD5加密的几种方法

c md5  时间:2021-01-27  阅读:()

C#MD5加密的几种方法

管理提醒

本帖被gaolei2016执行加亮操作(2010-01-21)

MD5加密是在网站开发经常使用到的加密方案。

在这里介绍几种MD5的几种方法。

1 、 asp.net中 MS有一套专用的加密使用方法

/// code为加密位数 16和32publ ic static string Md5(string str, int code)

{

//str=System.Web.HttpUti l ity.UrlEn code(str);if (code == 16) //16位MD5加密取32位加密的9~25字符

{return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFi le(str, "MD5").ToLower().Substring(8, 16);

}else//32位加密

{return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFi le(str, "MD5").ToLower();

}

2、 MSDN的案例

/**/

///<summary>

///MD5加密

///</summary>

///<param name="str"></param>

///<returns></returns>publ ic static string Md5(string str)

{

//Create a newinstance of the MD5CryptoServiceProvider object.

MD5 md5Hasher=MD5.Create();

//Convert the inputstring to a byte arrayand compute the hash.byte[]data=md5Hasher.ComputeHash(Encoding.GetEncoding("UTF-8").GetBytes(str));

// return BitConverter.ToString(data);//可以直接使用这个方法

//Create a newStringbui lder to col lect the bytes

// and create a string.

StringBui lder sBui lder=newStringBui lder();

//Loop through each byte of the hashed data

//and format each one as a hexadecimal string.for (int i=0; i<data.Length; i++)

{sBui lder.Append(data.ToString("x2"));

}

//Return the hexadecimal string.return sBuilder.ToString();

}

}

3、在使用淘宝API时淘宝提供的一个方法

///<summa ry>

///MD5加密并输出十六进制字符串

///</summa ry>

///<param name="str"></param>

///<returns></returns>public static string Md5Hex(string str)

{string dest = "";

//实例化一个md5对像

MD5 md5=MD5.Create();

//加密后是一个字节类型的数组这里要注意编码UTF8/Unicode等的选择byte[]s=md5.Comp uteHash(En coding.UTF8.Ge tBytes(str));

//通过使用循环将字节类型的数组转换为字符串此字符串是常规字符格式化所得for(int i=0; i<s.Length; i++)

{

//将得到的字符串使用十六进制类型格式。格式后的字符是大写的字母if (s < 16)

{dest=dest+"0"+s.ToString("X");

}else

{dest=dest+s.ToString("X");

}

}return dest;

}

以上2、3中对于中文有编码问题上面的案例为UTF-8编码 1中其实也有编码的问题但是那个主要是与当前页面的编码有关系即使用默认编码的方式。

4、 自己实现MD5类using System;using System.Text;namespace Encrypter

{

///<s u mma ry>

///Summary description for MD5.

///</s u mma ry>public class MD5

{const int BITS_TO_A_BYTE= 8;const int BYTES_TO_A_WORD= 4;const int BITS_TO_A_WORD= 32;private static long[]m_lOnBits = new long[30 + 1];private static long[]m_l2Power = new long[30 + 1];private static long LShift(long lValue, long iShiftBits)

{long LShift = 0;if(iSh iftBits == 0)

{

L Sh ift =l Va lu e;return LShift;

}else

{if(iSh iftBits == 31)

{if(Con ve rt.To Bo ole a n(l Va lue & 1))

{

L Sh ift=0x80000000;

}else

{

L Sh ift = 0;

}return LShift;

}else

{if(iSh iftBits<0| | iSh iftBits > 31)

{

//Err.Raise 6;

}

}

}if(Co n ve rt.To Bo ole a n((l Va lue&m_l2 P o we r[31 - iSh iftBits])))

{

L Sh ift=((l Va lu e&m_l O n Bits[31 - (iSh iftBits+1)]) *m_l2 Po we r[iSh iftBits]) |0x80000000;}else

{

L Sh ift=((l Va lu e&m_l O n Bits[31 - iSh iftBits]) *m_l2 Po we r[iSh iftBits]);

}return LShift;

}private static long RShift(long lValue, long iShiftBits)

{long RShift = 0;if(iSh iftBits == 0)

{

RShift=lValu e;return RShift;

}else

{if(iSh iftBits == 31)

{if(Co n ve rt.To Bo ole a n(l Va lue&0x80000000))

{

R Sh ift = 1;

}else

{

R Sh ift = 0;

}return RShift;

}else

{if(iSh iftBits<0| | iSh iftBits > 31)

{

//Err.Raise 6;

}

}

}

R Sh ift=(l Va lu e &0x7FFFFFFE)/m_l2Po we r[iSh iftBits];if(Con ve rt.To Bo ole a n((l Value&0x80000000)))

{

R Sh ift=(R Sh ift | (0x40000000/m_l2 Po we r[iSh iftBits - 1]));}return RShift;

}private static long RotateLeft(long lValue, long iShiftBits)

{long RotateLeft = 0;

Ro ta te L e ft=L Sh ift(l Va lu e, iSh iftBits) |R Sh ift(l Va lu e, (32-iSh iftBits));re turn Ro ta teL eft;

}private static long AddUnsigned(long lX, long lY)

{long AddUnsigned = 0;long lX4 = 0;long lY4 = 0;long lX8 = 0;long lY8 = 0;long lResult = 0;lX8=lX&0x80000000;lY8=lY&0x80000000;lX4=lX&0x40000000;lY4=lY&0x40000000;lResult=(lX&0x3FFFFFFF)+(lY&0x3FFFFFFF);if(Convert.ToBoolean(lX4 &lY4))

{lRe sult=lRe sult^0x80000000 ^ lX8 ^ l Y8;

}else if(Convert.ToBoolean(lX4 | lY4))

{

if(Con vert.ToBoole an(lRe sult&0x40000000))

{lRe sult=lRe sult^0xC0000000 ^ lX8 ^ l Y8;

}else

{lRe sult=lRe sult^0x40000000 ^ lX8 ^ l Y8;

}

}else

{lResult=lResult ^ lX8 ^ lY8;

}

AddUnsigned=lResult;return AddUnsigned;

}private static long md5_F(long x, long y, long z)

{long md5_F= 0;md5_F= (x&y) | ((~x) &z);return md5_F;

}private static long md5_G(long x, long y, long z)

{long md5_G= 0;md5_G= (x&z) | (y& (~z));return md5_G;

}private static long md5_H(long x, long y, long z)

{long md5_H= 0;md5_H= (x^y^ z);return md5_H;

}private static long md5_I(long x, long y, long z)

{long md5_I = 0;md5_I = (y^ (x| (~z)));return md5_I;

}private static void md5_FF(ref long a, long b, long c, long d, long x, long s, long ac){a=AddUnsigned(a,AddUnsigned(AddUnsigned(md5_F(b, c, d), x), a c));a=Ro ta te L e ft(a, s);a=AddUnsigned(a, b);

}private static void md5_GG(ref long a, long b, long c, long d, long x, long s, long ac){a=AddUnsigned(a,AddUnsigned(AddUnsigne d(md5_G(b, c, d), x), a c));

a=Ro ta te L e ft(a, s);a=AddUnsigned(a, b);

}private static void md5_HH(ref long a, long b, long c, long d, long x, long s, long ac)

{a=AddUnsigned(a,AddUnsigned(AddUnsigne d(md5_H(b, c, d), x), a c));a=Ro ta te L e ft(a, s);a=AddUnsigned(a, b);

}private static void md5_II(ref long a, long b, long c, long d, long x, long s, long ac)

{a=AddUnsigned(a,AddUnsigned(AddUnsigne d(md5_I(b, c, d), x), a c));a=Ro ta te L e ft(a, s);a=AddUnsigned(a, b);

}private static long[]ConvertToWordArray(string sMessage)

{long[]ConvertToWordArray= null;int lMessageLength = 0;int lNumberOfWords = 0;long[]lWordArray= null;int lBytePosition = 0;int lByteCount = 0;int lWordCount = 0;const int MODULUS_BITS= 512;const int CONGRUENT_BITS= 448;lMessageLength=sMessage.Length;lNumberOfWords=(((lMessageL ength+((MOD ULUS_BI TS-CONGRUENT_BI TS)/BI TS_TO_A_B YT

E))/(MODULUS_BITS/BITS_TO_A_BYTE))+1) *(MODULUS_BITS/BITS_TO_A_WORD);lWordArray=new long[lNumberOfWords];lByte Po sitio n = 0;lByte Count = 0;while(lByte Count<lMessageLength)

{lWordCount=lByte Count/BYTES_TO_A_WORD;lBytePosition=(lByte Co un t%B YTES_TO_A_WORD) *BI TS_TO_A_B YTE;lWordArray[lWordCount]=lWordArray[lWordCount]|LShift(Convert.ToByte(sMessage.Substring(lByte Coun t, 1).To CharArray()[0]), lBytePosition);lByte Count=lByte Count + 1;

}lWordCount=lByte Count/BYTES_TO_A_WORD;lBytePosition=(lByteCo un t%B YTES_TO_A_WORD) *BI TS_TO_A_B YTE;lWordArray[lWordCount]=lWordArray[lWordCount]|LShift(0x80, lBytePosition);lWordArray[lNumb erOfWords-2]=L Shift(lMessageL ength, 3);lWordArray[lNumb erOfWords- 1]=RShift(lMessageL ength, 29);

ConvertToWordArray=lWordArray;return ConvertToWordArray;

}private static string WordToHex(long lValue)

{string WordToHex= "";long lByte = 0;int lCount = 0;for(lCount=0; lCount<=3; lCount++)

{lByte=RShift(lValue, lCount *BI TS_TO_A_B YTE)&m_lOnBits[BI TS_TO_A_B YTE- 1];

WordToHex=Word ToHex+(("0"+ToHex(lByte)).Substring(("0"+ToHex(lByte)).L ength - 2));}return WordToHex;

}private static string ToHex(long dec)

{string strhex= "";wh ile (de c > 0)

{strhex=tohex(dec%16)+strhex;de c = de c/16;

}return strhex;

}private static string tohex(long hex)

{string strhex= "";switc h (h ex)

{case 10:strhex="a";break;case 11:strhex="b";break;case 12:strhex="c";break;case 13:strhex="d";break;case 14:strhex="e";break;case 15:strhex="f";break;default:strhex=hex.ToString();break;

}return strhex;

}public static string Encrypt(string sMessage, int stype)

{string MD5 = "";for (int i = 0; i <= 30; i++)

{m_lOnBits=Con ve rt.ToInt64(Math.Pow(2, i + 1) - 1);m_l2Power=Convert.ToInt64(Math.Pow(2, i));

}long[]x= null;int k = 0;long AA= 0;long BB= 0;

long CC= 0;long DD= 0;long a = 0;long b = 0;long c = 0;long d = 0;const int S11 = 7;const int S12 = 12;const int S13 = 17;const int S14 = 22;const int S21 = 5;const int S22 = 9;const int S23 = 14;const int S24 = 20;const int S31 = 4;const int S32 = 11;const int S33 = 16;const int S34 = 23;const int S41 = 6;const int S42 = 10;const int S43 = 15;const int S44 = 21;x=ConvertToWordArray(sMessage);a=0x67452301;b=0xEF CDA B 89;c=0x98BAD CFE;d=0x 10325476;for(k=0;k<x.Length; k += 16)

{

AA= a;

BB= b;

CC= c;

DD= d;md5_FF(ref a,b,c,d,x[k+0],S 11,0xD 76AA478);md5_FF(re f d,a,b,c,x[k+1],S 12,0xE8 C 7B 756);md5_FF(ref c,d,a,b,x[k+2],S 13,0x242070DB);md5_FF(ref b,c,d,a,x[k+3],S 14,0xC 1 BDCEEE);md5_FF(ref a,b,c,d,x[k+4],S11,0xF57C0FAF);md5_FF(ref d,a,b,c,x[k+5],S12,0x4787C62A);md5_FF(ref c, d, a, b, x[k + 6], S 13,0xA 8304613);md5_FF(ref b,c,d,a,x[k+7],S 14,0xFD469501);md5_FF(ref a,b,c,d,x[k+8],S 11,0x698098D8);md5_FF(ref d,a,b,c,x[k+9],S 12,0x8B44F7AF);md5_FF(ref c,d,a,b,x[k+10],S 13,0xFFFF5BB 1);md5_FF(ref b,c,d,a,x[k+11],S 14,0x895 CD 7BE);md5_FF(ref a,b,c,d,x[k+12],S11,0x6B901122);md5_FF(ref d,a,b,c,x[k+13],S 12,0xFD987193);md5_FF(ref c,d,a,b,x[k+14],S 13,0xA679438E);md5_FF(ref b,c,d,a,x[k+15],S 14,0x49B40821);

md5_G G(ref a,b,c,d,x[k+1],S21,0xF61E2562);md5_GG(ref d, a,b,c,x[k+6],S22,0xC040B340);md5_G G(re f c,d,a,b,x[k+11],S23,0x265E5A 51);md5_G G(ref b,c,d,a,x[k+0],S24,0xE9B6C 7AA);md5_GG(ref a,b,c,d,x[k+5],S21,0xD62F 105D);md5_G G(ref d,a,b,c,x[k+10],S22,0x2441453);md5_GG(ref c,d,a,b,x[k+15],S23,0xD8A 1 E681);md5_G G(ref b,c,d,a,x[k+4],S24,0xE7D3FBC8);md5_GG(ref a, b, c, d, x[k +9],S21,0x21E1 CDE6);md5_G G(ref d,a,b,c,x[k+14],S22,0xC33707D6);md5_G G(ref c,d,a,b,x[k+3],S23,0xF4D50D87);md5_GG(ref b,c,d,a,x[k+8],S24,0x455A 14ED);md5_GG(ref a,b, c,d,x[k+13],S21,0xA9E3E905);md5_GG(ref d,a,b,c,x[k+2],S22,0xFCEFA3F8);md5_GG(ref c,d,a,b,x[k+7],S23,0x676F02D9);md5_GG(ref b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);md5_HH(re f a,b,c,d,x[k+5],S31,0xFFFA 3942);md5_HH(ref d,a,b,c,x[k+8],S32,0x8771 F681);md5_HH(ref c,d,a,b,x[k+11],S33,0x6D9D6122);md5_HH(re f b,c,d,a,x[k+14],S34,0xFDE5380 C);md5_HH(re f a,b,c,d,x[k+1],S31,0xA4BEEA44);md5_HH(ref d,a,b,c,x[k+4],S32,0x4BDECFA 9);md5_HH(ref c,d,a,b,x[k+7],S33,0xF6BB4B60);md5_HH(re f b,c,d,a,x[k+10],S34,0xBEBFBC 70);md5_HH(re f a,b,c,d,x[k+13],S31,0x289B 7EC6);md5_HH(re f d,a,b,c,x[k+0],S32,0xEAA 127FA);md5_HH(ref c, d, a, b, x[k+3],S33,0xD4EF3085);md5_HH(re f b,c,d,a,x[k+6],S34,0x4881 D05);md5_HH(ref a,b,c,d,x[k+9],S31,0xD9D4D039);md5_HH(ref d,a,b,c,x[k+12],S32,0xE6DB99E5);md5_HH(ref c,d,a,b,x[k+15],S33,0x1 FA27CF8);md5_HH(re f b,c,d,a,x[k+2],S34,0xC4A C5665);md5_II(ref a,b,c,d,x[k+0],S41,0xF4292244);md5_II(ref d, a, b, c, x[k + 7], S42, 0x432AFF97);md5_II(ref c,d,a,b,x[k+14],S43,0xAB9423A 7);md5_II(ref b,c,d,a,x[k+5],S44,0xFC93A039);md5_II(ref a,b,c,d,x[k+12],S41,0x655B59C3);md5_II(ref d,a,b, c,x[k+3],S42,0x8F0CCC92);md5_II(ref c,d,a,b,x[k+10],S43,0xFFEFF47D);md5_II(ref b,c,d,a,x[k+1],S44,0x85845DD 1);md5_II(ref a,b,c,d,x[k+8],S41,0x6FA87E4F);md5_II(ref d,a,b, c,x[k+15],S42,0xFE2 CE6E0);md5_II(ref c,d,a,b,x[k+6],S43,0xA3014314);md5_II(ref b,c,d,a,x[k+13],S44,0x4E0811A 1);md5_II(re f a, b, c, d,x[k+4],S41,0xF 7537E82);md5_II(ref d,a,b, c,x[k+11],S42,0xBD3AF235);md5_II(ref c,d,a,b,x[k+2],S43,0x2AD 7D2BB);md5_II(ref b,c,d,a,x[k+9],S44,0xEB86D391);a=AddUn sign ed(a,AA);

RAKsmart美国洛杉矶独立服务器 E3-1230 16GB内存 限时促销月$76

RAKsmart 商家我们应该较多的熟悉的,主营独立服务器和站群服务器业务。从去年开始有陆续的新增多个机房,包含韩国、日本、中国香港等。虽然他们家也有VPS主机,但是好像不是特别的重视,价格上特价的时候也是比较便宜的1.99美元月付(年中活动有促销)。不过他们的重点还是独立服务器,毕竟在这个产业中利润率较大。正如上面的Megalayer商家的美国服务器活动,这个同学有需要独立服务器,这里我一并整理...

TMTHosting:夏季优惠,美国西雅图VPS月付7折,年付65折,美国服务器95折AS4837线路

tmthosting怎么样?tmthosting家本站也分享过多次,之前也是不温不火的商家,加上商家的价格略贵,之到斯巴达商家出现,这个商家才被中国用户熟知,原因就是斯巴达家的机器是三网回程AS4837线路,而且也没有多余的加价,斯巴达家断货后,有朋友发现TMTHosting竟然也在同一机房,所以大家就都入手了TMTHosting家的机器。目前,TMTHosting商家放出了夏季优惠,针对VPS推...

傲游主机38.4元起,韩国CN2/荷兰VPS全场8折vps香港高防

傲游主机怎么样?傲游主机是一家成立于2010年的老牌国外VPS服务商,在澳大利亚及美国均注册公司,是由在澳洲留学的害羞哥、主机论坛知名版主组长等大佬创建,拥有多家海外直连线路机房资源,提供基于VPS主机和独立服务器租用等,其中VPS基于KVM或者XEN架构,可选机房包括中国香港、美国洛杉矶、韩国、日本、德国、荷兰等,均为CN2或者国内直连优秀线路。傲游主机提供8折优惠码:haixiuge,适用于全...

c md5为你推荐
国内免备案服务器国内的服务器是都要备案是吗?有没有不需要备案的?租车平台哪个好共享汽车现在哪个平台的比较好?录屏软件哪个好现在什么录屏软件好,不卡的,推荐一个,谢谢。莫代尔和纯棉哪个好莫代尔和纯棉的区别,莫代尔和纯棉哪个好传奇类手游哪个好传奇手游版哪个好玩人多?帕萨特和迈腾哪个好迈腾与帕萨特那个好?游戏加速器哪个好网游加速器那个好?行车记录仪哪个好我想买一个24小时监控行车记录仪,哪款比较好?云盘哪个好网盘哪个好用?qq空间登录电脑手机怎么登qq空间电脑版?
提供香港vps 罗马假日广场 阿里云os siteground vpsio la域名 512au web服务器架设软件 空间服务商 国外网站代理服务器 dux 空间出租 hkg idc是什么 cdn加速是什么 华为云盘 工信部icp备案查询 免费网络空间 北京主机托管 hdsky 更多