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

百纵科技(1399元/月)香港CN2站群232IP

湖南百纵科技有限公司是一家具有ISP ICP 电信增值许可证的正规公司,多年不断转型探索现已颇具规模,公司成立于2009年 通过多年经营积累目前已独具一格,公司主要经营有国内高防服务器,香港服务器,美国服务器,站群服务器,东南亚服务器租用,国内香港美国云服务器,以及全球专线业务!活动方案:主营:1、美国CN2云服务器,美国VPS,美国高防云主机,美国独立服务器,美国站群服务器,美国母机。2、香港C...

阿里云金秋上云季,云服务器秒杀2C2G5M年付60元起

阿里云(aliyun)在这个月又推出了一个金秋上云季活动,到9月30日前,每天两场秒杀活动,包括轻量应用服务器、云服务器、云数据库、短信包、存储包、CDN流量包等等产品,其中Aliyun轻量云服务器最低60元/年起,还可以99元续费3次!活动针对新用户和没有购买过他们的产品的老用户均可参与,每人限购1件。关于阿里云不用多说了,国内首屈一指的云服务器商家,无论建站还是学习都是相当靠谱的。活动地址:h...

云基最高500G DDoS无视CC攻击(Yunbase),洛杉矶CN2GIA、国内外高防服务器

云基成立于2020年,目前主要提供高防海内外独立服务器用户,欢迎各类追求稳定和高防优质线路的用户。业务可选:洛杉矶CN2-GIA+高防(默认500G高防)、洛杉矶CN2-GIA(默认带50Gbps防御)、香港CN2-GIA高防(双向CN2GIA专线,突发带宽支持,15G-20G DDoS防御,无视CC)、国内高防服务器(广州移动、北京多线、石家庄BGP、保定联通、扬州BGP、厦门BGP、厦门电信、...

c md5为你推荐
月付百万的女人们我们家的女人们92集在线观看 韩剧我们家的女人们92中字 我们家的女人们93集快播下载聚酯纤维和棉哪个好聚酯纤维和棉 那个比较暖和啊免费阅读小说app哪个好有什么好用的看小说的app朱祁钰和朱祁镇哪个好大家怎么看明英宗和明代宗机械表和石英表哪个好手表中,石英表和机械表的区别和优缺点手机管家哪个好手机管家哪个好dnf魔枪士转职哪个好dnf魔枪士转职哪个适合平民玩雅思和托福哪个好考考托福好还是雅思好看书软件哪个好读书软件哪个好qq空间登录网页版网页版QQ怎么登陆
域名备案 深圳虚拟主机 免费域名解析 免费申请域名 中国万网域名 企业主机 免备案空间 哈喽图床 seovip 2017年万圣节 标准机柜尺寸 云鼎网络 阿里云浏览器 秒杀汇 域名接入 免费测手机号 太原网通测速平台 web服务器安全 789 主机管理系统 更多