加密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);

香港站群多ip服务器多少钱?零途云香港站群云服务器怎么样?

香港站群多ip服务器多少钱?想做好站群的SEO优化,最好给每个网站都分配一个独立IP,这样每个网站之间才不会受到影响。对做站群的站长来说,租用一家性价比高且提供多IP的香港多ip站群服务器很有必要。零途云推出的香港多ip站群云服务器多达256个IP,可以满足站群的优化需求,而且性价比非常高。那么,香港多ip站群云服务器价格多少钱一个月?选择什么样的香港多IP站群云服务器比较好呢?今天,小编带大家一...

丽萨主机:美国CN2 GIA精品网/KVM/9折,美国原生IP,最低27元/月

丽萨主机怎么样?丽萨主机,团队于2017年成立。成立之初主要做的是 CDN 和域名等相关业务。最近开辟新领域,新增了独立服务器出租、VPS 等业务,为了保证业务质量从一开始就选择了中美之间的 CN2 GIA 国际精品网络,三网回程 CN2 GIA,电信去程 CN2 GIA + BGP 直连智能路由,联通移动去程直连,原生IP。适合对网络要求较高的用户,同时价格也比较亲民。点击进入:丽萨主机官方网站...

RackNerd新上圣何塞、芝加哥、达拉斯、亚特兰大INTEL系列,$9.49/年

racknerd怎么样?racknerd商家最近促销三款美国便宜vps,最低只需要9.49美元,可以选择美国圣何塞、西雅图、纽约和芝加哥机房。RackNerd是一家成立于2019年的美国高性价比服务器商家,主要从事美国和荷兰数据中心的便宜vps、独立服务器销售!支持中文工单、支持支付宝和微信以及PayPal付款购买!点击直达:racknerd官方网站INTEL系列可选机房:加利福尼亚州圣何塞、芝加...

c md5为你推荐
迈腾和帕萨特哪个好新帕萨特怎么样 迈腾和帕萨特哪个好传奇类手游哪个好什么传奇类手游好玩不坑钱?少儿英语哪个好少儿英语哪套教材好哪里好呢?朱祁钰和朱祁镇哪个好明英宗和明代宗哪个皇帝要做得好网校哪个好市面上的网校,谁最好?红茶和绿茶哪个好红茶和绿茶哪个更好?云盘哪个好免费的网盘哪个实用?51个人空间登录为什么登陆51博客个人空间就不能登陆QQ最便宜的车最便宜的汽车是多少钱?最便宜的跑车最便宜的跑车有哪些
重庆域名注册 个人域名备案流程 已经备案域名 外国服务器 视频存储服务器 外国空间 好玩的桌面 论坛空间 长沙服务器 大容量存储器 双十一秒杀 ftp免费空间 如何安装服务器系统 如何建立邮箱 google台湾 台湾google 秒杀品 服务器防火墙 国外网页代理 睿云 更多