#region 以MD5的方式加密指定字符串
//*********************************************************************
//
// Security.Encrypt() Method
//
// The Encrypt method encrypts a clean string into a hashed string
//
//*********************************************************************
/// <summary>
/// 以MD5的方式加密指定字符串
/// </summary>
/// <param name="cleanString"></param>
/// <returns></returns>
public static string Encrypt(string cleanString)
{
Byte[] clearBytes = new UnicodeEncoding().GetBytes(cleanString);
Byte[] hashedBytes = ((HashAlgorithm) CryptoConfig.CreateFromName("MD5")).ComputeHash(clearBytes);
return BitConverter.ToString(hashedBytes);
}
#endregion
.net 开发人员可以使用多种散列算法类。最常用的是 sha1 和 md5。下面我们看一下如何为“paul”这样的普通字符串生成散列,使任何人都无法识别它。
使用 sha1 生成散列
我们创建一个新例程,然后使用它为字符串“paul”生成散列。在 visual studio® .net 中打开一个新的 windows 应用程序,在窗体上放置一个命令按钮。当该命令按钮上发生 click 事件时,将调用名为 hashtext() 的方法。您可以将以下代码添加到该窗体中,看一下此散列算法的实际效果。编写下列代码之前,需要导入命名空间 system.security.cryptography。
private sub hashtext(byval texttohash as string) dim sha1 as sha1cryptoserviceprovider dim bytvalue() as byte dim bythash() as byte ' 创建新的加密服务提供程序对象 sha1 = new sha1cryptoserviceprovider ' 将原始字符串转换成字节数组 bytvalue = _ system.text.encoding.utf8.getbytes(texttohash) ' 计算散列,并返回一个字节数组 bythash = sha1.computehash(bytvalue) sha1.clear() ' 返回散列值的 base64 编码字符串 debug.writeline(convert.tobase64string(bythash)) end sub
您可以传递不同的字符串值来调用该例程,查看散列值的变化。例如,如果将字符串“paul”传递给该例程,debug(调试)窗口将显示以下文本:
w2h6uygmjt/nq5zqihcbteaxwv8=
现在,将此过程中的输入值更改为“pauly”。您将看到以下输出结果:
proywxj0znmpgf5sbb18+7gsasm=
如您所见,输入字符串的一个小小变化就会产生完全不同的字符组合。这正是散列算法之所以有效的原因,它使我们很难找到输入字符串的规律,也很难根据加密后的字符弄清楚字符串原来的模样。
使用 md5 也可以生成散列
了解一种散列类的使用方法后,基本上就了解了所有的散列类。下面的方法用于 md5 散列算法。注意,除了 cryptoserviceprovider 类不同外,代码是完全相同的。
private sub hashtextmd5(byval texttohash as string) dim md5 as md5cryptoserviceprovider dim bytvalue() as byte dim bythash() as byte ' 创建新的加密服务提供程序对象 md5 = new md5cryptoserviceprovider ' 将原始字符串转换成字节数组 bytvalue = system.text.encoding. _ utf8.getbytes(texttohash) ' 计算散列,并返回一个字节数组 bythash = md5.computehash(bytvalue) md5.clear() ' 返回散列值的 base64 编码字符串 debug.writeline(convert.tobase64string(bythash)) end sub