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

[6.18]IMIDC:香港/台湾服务器月付30美元起,日本/俄罗斯服务器月付49美元起

IMIDC发布了6.18大促销活动,针对香港、台湾、日本和莫斯科独立服务器提供特别优惠价格最低月付30美元起。IMIDC名为彩虹数据(Rainbow Cloud),是一家香港本土运营商,全线产品自营,自有IP网络资源等,提供的产品包括VPS主机、独立服务器、站群独立服务器等,数据中心区域包括香港、日本、台湾、美国和南非等地机房,CN2网络直连到中国大陆。香港服务器   $39/...

数脉科技香港自营,10Mbps CN2物理机420元/月

数脉科技怎么样?数脉科技品牌创办于2019,由一家从2012年开始从事idc行业的商家创办,目前主营产品是香港服务器,线路有阿里云线路和自营CN2线路,均为中国大陆直连带宽,适合建站及运行各种负载较高的项目,同时支持人民币、台币、美元等结算,提供支付宝、微信、PayPal付款方式。本次数脉科技给发来了新的7月促销活动,CN2+BGP线路的香港服务器,带宽10m起,配置E3-16G-30M-3IP,...

2021年7月最新洛杉矶CN2/香港CN2 vps套餐及搬瓦工优惠码 循环终身优惠6.58%

搬瓦工怎么样?2021年7月最新vps套餐推荐及搬瓦工优惠码整理,搬瓦工优惠码可以在购买的时候获取一些优惠,一般来说力度都在 6% 左右。本文整理一下 2021 年 7 月最新的搬瓦工优惠码,目前折扣力度最大是 6.58%,并且是循环折扣,续费有效,可以一直享受优惠价格续费的。搬瓦工优惠码基本上可能每年才会更新一次,大家可以收藏本文,会保持搬瓦工最新优惠码更新的。点击进入:搬瓦工最新官方网站搬瓦工...

c md5为你推荐
滴滴软银合资最适合跑滴滴的是什么车?10万一下的车?少儿英语哪个好少儿英语哪个好朱祁钰和朱祁镇哪个好朱高炽在位时间长还是朱祁钰在位时间长?绝地求生加速器哪个好玩绝地求生用什么加速器好啊?英语词典哪个好哪个英语词典好杰士邦和杜蕾斯哪个好安全套是杜蕾斯的好用还是杰士邦的好用?核芯显卡与独立显卡哪个好英特尔核芯显卡怎么样?和独立显卡那个更好?播放器哪个好哪个播放器最好电动牙刷哪个好飞利浦电动牙刷哪款好?求推荐行车记录仪哪个好我想买一个24小时监控行车记录仪,哪款比较好?
根域名服务器 汉邦高科域名注册 php主机租用 淘宝二级域名 过期域名抢注 20g硬盘 512m 国外免费空间 七夕快乐英文 135邮箱 免费防火墙 双12 环聊 登陆空间 韩国代理ip 中国电信测速网站 阿里云邮箱登陆地址 工信部icp备案查询 中国联通宽带测速 美国迈阿密 更多