现在的位置: 首页 > 综合 > 正文

以MD5的方式,sha1 生成散列 加密指定字符串

2013年09月06日 ⁄ 综合 ⁄ 共 1993字 ⁄ 字号 评论关闭

  #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

抱歉!评论已关闭.