MD5加密 using System; 说到大名鼎鼎的MD5算法,稍有经验的程序员都应该听说过,特别是做Web应用程序的开发人员。那什么是MD5呢?MD5是现在使用最广泛的一种哈希算 法,它的作用就是如果哪一天你的网站被人攻破,数据被人窃取,你也不用担心用户信息泄露,因为攻击者看到的所有密码都只是一些没有意义的字符串而已(当然 前提是你已经对密码做过加密处理)。关于于MD5的算法和能力我就不多做介绍了,网上类似的讨论已经多如牛毛,这里只是把.NET中使用MD5算法的方法 做个整理。 public string CalculateMD5Hash(string input) 调用方法: string hash = CalculateMD5Hash("abcdefghijklmnopqrstuvwxyz"); 返回值为一个32位的字符串: public static string HashPasswordForStoringInConfigFile ( 其中password就是你要加密的密码,passwordFormat表示加密方式,只能取FormsAuthPasswordFormat类型的值, 否则会发生异常,这里有三种选择:"Clear"、"SHA1"、"MD5",分别表示明文显示、使用SHA1算法、使用MD5算法。 string hash = HashPasswordForStoringInConfigFile("abcdefghijklmnopqrstuvwxyz"); 返回值与上面一样。 public class PasswordHelper |
WEB上常用的两种加密方式:MD5和SHA512。
这里分享两个使用的方法
都需要用到.net的以下两个空间
using System.Text
using System.Security.Cryptography
1 MD5
(不带密钥,任何文本使用MD5加密后的结果是一致的,有安全隐患)
public string PWDByMd5(string sText)
{
string pwd = "";
MD5 md5 = MD5.Create();
// 加密后是一个字节类型的数组
byte[] s = md5.ComputeHash(Encoding.Unicode.GetBytes(sText));
// 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
for (int i = 0; i < s.Length; i++)
{
// 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
pwd = pwd + s[i].ToString("x");
}
return pwd;
}
2 SHA512
(带密钥加密,文本需要在相同密钥的情况下,加密出的结果才会一致)
public static string PWDBySHA512(
string sKey, //密钥
string sText //需要加密的文本
)
{
byte[] HmacKey = System.Text.Encoding.UTF8.GetBytes(sKey);
byte[] HmacData = System.Text.Encoding.UTF8.GetBytes(sText);
HMACSHA512 Hmac = new HMACSHA512(HmacKey);
CryptoStream cs = new CryptoStream(Stream.Null, Hmac, CryptoStreamMode.Write);
cs.Write(HmacData, 0, HmacData.Length);
cs.Close();
byte[] Result = Hmac.Hash;
return Convert.ToBase64String(Result); //返回长度为28字节字符串
}
以上内容是转贴的…………呵呵,其实我的程序里面用到的比较简单:
/// <summary>
/// 比對明碼密碼和加密密碼-Md5
/// </summary>
/// <param name="TxtPassword">明碼</param>
/// <param name="EncPassword">密碼</param>
/// <returns>bool (true - 符合; false - 不符合)</returns>
public static bool ComparePassword(String TxtPassword,String EncPassword) {
try {
bool retState = false;
try {
String aenPasswd = EnCodeString(TxtPassword);
if(aenPasswd.Equals(EncPassword)) {
retState = true;
}
}
catch(EZFException ezfex) {
throw ezfex;
}
return retState;
} catch (EZFException ezfEx) {
throw ezfEx;
} catch (Exception ex) {
string sErrorMessage = "Cipher.ComparePassword() Error";
EZFException ezfEx = new EZFException(sErrorMessage, ex, EZFExceptionConst.METHOD_ExNotExpect);
throw ezfEx;
}
}
/// <summary>
/// 取得加密過密碼-Md5
/// </summary>
/// <param name="Password">明碼</param>
/// <returns>加密過密碼(string)</returns>
public static string EnCodeString(string Password) {
try {
MD5 md5 = new MD5CryptoServiceProvider();
byte[] passwd = md5.ComputeHash(System.Text.Encoding.Unicode.GetBytes(Password));
byte[] passwd2 = md5.ComputeHash(passwd,3,6);
System.Text.StringBuilder sb = new StringBuilder();
foreach(byte mbye in passwd) {
sb.Append(mbye.ToString("x2"));
}
foreach(byte mbye in passwd2) {
sb.Append(mbye.ToString("x2"));
}
return sb.ToString();
} catch (EZFException ezfEx) {
throw ezfEx;
} catch (Exception ex) {
string sErrorMessage = "Cipher.EnCodeString() Error";
EZFException ezfEx = new EZFException(sErrorMessage, ex, EZFExceptionConst.METHOD_ExNotExpect);
throw ezfEx;
}
}