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

提速啦(24元/月)河南BGP云服务器活动 买一年送一年4核 4G 5M

提速啦的来历提速啦是 网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑 由赣州王成璟网络科技有限公司旗下赣州提速啦网络科技有限公司运营 投资1000万人民币 在美国Cera 香港CTG 香港Cera 国内 杭州 宿迁 浙江 赣州 南昌 大连 辽宁 扬州 等地区建立数据中心 正规持有IDC ISP CDN 云牌照 公司。公司购买产品支持3天内退款 超过3天步退款政策。提速啦的市场定位提速啦主...

raksmart:年中大促,美国物理机$30/月甩卖;爆款VPS仅月付$1.99;洛杉矶/日本/中国香港多IP站群$177/月

RAKsmart怎么样?RAKsmart发布了2021年中促销,促销时间,7月1日~7月31日!,具体促销优惠整理如下:1)美国西海岸的圣何塞、洛杉矶独立物理服务器低至$30/月(续费不涨价)!2)中国香港大带宽物理机,新品热卖!!!,$269.23 美元/月,3)站群服务器、香港站群、日本站群、美国站群,低至177美元/月,4)美国圣何塞,洛杉矶10G口服务器,不限流量,惊爆价:$999.00,...

百纵科技云主机首月9元,站群1-8C同价,美国E52670*1,32G内存 50M 899元一月

百纵科技:美国高防服务器,洛杉矶C3机房 独家接入zenlayer清洗 带金盾硬防,CPU全系列E52670、E52680v3 DDR4内存 三星固态盘阵列!带宽接入了cn2/bgp线路,速度快,无需备案,非常适合国内外用户群体的外贸、搭建网站等用途。官方网站:https://www.baizon.cnC3机房,双程CN2线路,默认200G高防,3+1(高防IP),不限流量,季付送带宽美国洛杉矶C...

c md5为你推荐
宝来和朗逸哪个好大众朗逸好还是宝来好手机杀毒软件哪个好手机用什么杀毒软件好二手车网站哪个好想买台二手车,哪个二手车网站靠谱ps软件哪个好Photoshop哪个软件好用点?游戏盒子哪个好请问游戏盒子哪个好啊qq空间登录器怎样直接登录QQ空间yy空间登录怎么进入YY音乐空间东莞电信宽带在东莞报装办理电信宽带好不好用,需要多少钱,在哪里报装360云盘转存百度云盘360云盘可以转存百度云盘吗强生月抛强生月抛隐形眼镜适合什么样的人群佩戴?
虚拟空间免费试用 华众虚拟主机管理系统 海外域名注册 westhost 美国主机评论 湖南服务器托管 骨干网络 免空 国外免费全能空间 韩国名字大全 免费活动 网络空间租赁 绍兴电信 如何注册阿里云邮箱 新世界服务器 512mb 免费外链相册 云营销系统 下载速度测试 美国迈阿密 更多