[翻译]微软.net加密技术简介[上][1]
[入库:2006年2月23日] [更新:2007年3月24日]
作者:Paul D. Sheriff
PDSA.com
2003年10月
关键字:
.net
安全
Visual Basic? .NET
C#
概述:学习如何利用.net框架中的加密功能来保护你的数据。
下载代码:CryptoSampleCSSample.msi(
http://download.microsoft.com/download/2/a/3/2a363740-3da6-48e9-a5d1-8eca01524372/CryptoSampleCSSample.msi)
CryptoSampleVBSample.msi(
http://download.microsoft.com/download/2/a/3/2a363740-3da6-48e9-a5d1-8eca01524372/CryptoSampleVBSample.msi)
正文:
你的电脑中有秘密吗?如果有,加密技术就是你最好的工具。加密技术是一种将有含义的字符转换为无含义的字符的科学,用以保证其不会被不具备权限的人阅读。加密技术的历史比计算机的历史还要久远。计算机出现以后,加密技术可以生成几乎不能攻破的密码。微软已经在Windows95中开发并发布了加密API。在.net中,崭新的类将复杂的算法封装在简单易用的方法和属性中。
玉米 牛肉 散列
如果你要做的只是避免密码被他人窃取,你需要创建密码的散列值。散列是一种单向算法,一旦数据被转换,就不可能重新得到数据的原值。大多数开发者使用数据库来存储密码,如果有人查看数据库中的用户数据,将得到用户的密码,除非你在数据库中存储的是密码的散列值。当用户输入用户密码时,你可以再次计算密码的散列值,将其与数据库中存储的散列值进行比较。散列的另一个副产品是,即使原始数据中的一小处修改将产生一个完全不同的散列值。例如“Pork”和“Porky”,进行散列运算后将产生完全不同的输出,而且两个输出之间没有任何联系。
对于.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
' Create New Crypto Service Provider Object SHA1 = New SHA1CryptoServiceProvider
' Convert the original string to array of Bytes bytValue = _ System.Text.Encoding.UTF8.GetBytes(TextToHash)
' Compute the Hash, returns an array of Bytes bytHash = SHA1.ComputeHash(bytValue)
SHA1.Clear()
' Return a base 64 encoded string of the Hash value Debug.WriteLine(Convert.ToBase64String(bytHash)) End Sub
|
|
你可以将一个字符串传入这个例程,以得到散列值。例如,你可以传入“Paul”这个字符串,调试窗口将显示下列字符:
以下内容为程序代码:
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
' Create New Crypto Service Provider Object md5 = New MD5CryptoServiceProvider
' Convert the original string to array of Bytes bytValue = System.Text.Encoding. _ UTF8.GetBytes(TextToHash)
' Compute the Hash, returns an array of Bytes bytHash = md5.ComputeHash(bytValue)
md5.Clear()
' Return a base 64 encoded string of the Hash value Debug.WriteLine(Convert.ToBase64String(bytHash)) End Sub
|
|
传入“Paul”,MD5算法输出的字符串如下:
以下内容为程序代码:
nVWBsHh1MKNctPioSyqyTQ==
|
|
本文关键:[翻译]微软.net加密技术简介[上]
本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)