下载首页 | 资讯中心 | 下载分类 | 最近更新 | 排 行 榜 | 国产软件 | 国外软件 | 汉化补丁 |
文章搜索: 分类 关键字 收藏本站设为首页
您的位置:首页网页设计ASP程序 → Microsoft .NET 中的简化加密__教程
Microsoft .NET 中的简化加密__教程
日期:2007-5-20 1:15:08 人气:168     [ ]
上一页 [1] [2] [3] [4] [5] [6] [7] 下一页

创建示例散列项目
本文包含两个示例散列项目,以更普通的方式说明如何使用不同的散列算法加密任意字符串。这两个示例项目的名称分别为 CryptoSampleVB.sln 和 CryptoSampleCS.sln。前者是 Visual Basic .NET 解决方案,后者是 C# 解决方案。两个解决方案都包括一个类似图 1 的窗体,该窗体允许您输入要通过散列算法为其加密的原始字符串,还提供一个用来选择散列算法的选项按钮和一个显示散列结果的文本框。



图 1:创建一个通用散列屏幕来尝试两种散列算法。

单击此屏幕上的 Hash(散列)按钮时,将运行该按钮的 Click 事件过程。此事件过程将调用一个名为 HashString() 的例程。

' Visual Basic .NET
Private Sub btnHash_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnHash.Click
txtHashed.Text = HashString(txtOriginal.Text)
End Sub
// C#
private void cmdHash_Click(object sender,
System.EventArgs e)
{
txtHashed.Text = HashString(txtOriginal.Text);
}
HashString() 方法接受输入的值并调用 SetHash() 方法。此方法将根据窗体上选项按钮的设置来决定使用哪个加密服务提供程序创建该方法的实例并返回该方法。将为该窗体创建一个名为 mHash 的 HashAlgorithm 类型的成员变量。HashAlgorithm 类型是创建所有散列加密服务提供程序的基类。

' Visual Basic .NET
Private mhash As HashAlgorithm

// C#
private HashAlgorithm mhash;
SetHash() 方法如下所示:

' Visual Basic .NET
Private Function SetHash() As HashAlgorithm
If optSHA1.Checked Then
Return New SHA1CryptoServiceProvider
Else
If optMD5.Checked Then
Return New MD5CryptoServiceProvider
End If
End If
End Function

// C#
private HashAlgorithm SetHash()
{
if(this.optSHA1.Checked)
return new SHA1CryptoServiceProvider();
else
return new MD5CryptoServiceProvider();
}
根据您在窗体上选择的选项按钮,此方法将创建并返回一个不同的 HashAlgorithm 类型。HashString() 方法在该窗体上执行实际的数据加密:

' Visual Basic .NET
Private Function HashString(ByVal Value As String) _
As String
Dim bytValue() As Byte
Dim bytHash() As Byte

' 创建新的加密服务提供程序对象
mhash = SetHash()

' 将原始字符串转换成字节数组
bytValue = System.Text.Encoding.UTF8.GetBytes(Value)

' 计算散列,并返回一个字节数组
bytHash = mhash.ComputeHash(bytValue)

mhash.Clear()

' 返回散列值的 Base64 编码字符串
Return Convert.ToBase64String(bytHash)
End Function


// C#
private string HashString(string Value)
{
mhash = SetHash();

// 将原始字符串转换成字节数组
byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(Value);

// 计算散列,并返回一个字节数组
byte[] bytHash = mhash.ComputeHash(bytValue);

mhash.Clear();

// 返回散列值的 Base64 编码字符串
return Convert.ToBase64String(bytHash);
}
在 HashString 方法中,我们创建了两个字节数组。第一个数组用来保存用户的原始字符串输入。我们使用 System.Text.Encoding.UTF8.GetBytes() 方法将该字符串转换成字节数组。将原始字符串转换成字节数组后,现在使用服务提供程序的 ComputeHash() 方法计算该字符串的散列值。此方法接受字节数组作为输入,然后返回该字符串加密格式的字节数组。

注意:完成之后清除散列变量是一个好的做法。因此,您看到计算该字符串的散列后,我们调用了 Clear 方法。
现在我们已经获得了加密的字节数组,这正是要从该方法返回的数组。因为我们要将原始值和加密值都作为字符串数据类型而不是字节数组进行处理,所以要通过使用 Convert.ToBase64String 方法返回加密的字节。此方法负责将字节数组转换成 Base64 编码的字符串。Base64 编码的使用非常重要,因为有可能需要将此字符串推到 Web 页上或将其存储到数据库中。如果不进行转换,加密字符串中的某些高阶 ASCII 字符将无法正确显示或存储。

在散列中添加一些“盐”值
到目前为止,散列算法暴露出来的问题之一是,如果两个用户碰巧使用相同的密码,那么散列值将完全相同。如果黑客看到您存储密码的表格,会从中找到规律并明白您很可能使用了常见的词语,然后黑客会开始词典攻击以确定这些密码。要确保任何两个用户密码的散列值都不相同,一种方法是在加密密码之前,在每个用户的密码中添加一个唯一的值。这个唯一值称为“盐”值。在进行此操作时,需要确保将使用的盐值存储为用户记录的一部分。如果您使用表格存储用户 ID 和密码,我建议您使用不同的表格来存储盐值。这样,即使数据库泄漏,盐值也可以为您提供一层额外的安全保护。
出处:本站原创 作者:佚名
 阅读排行
01.精美qq空间横幅代码
02.最酷qq个性女生网名
03.最新又有免费QQ秀啦《..
04.巧用透明FlaSh扮靓你的..
05.花之神匠代码(最新代码..
06.最新QQ空间免费导航
07.最新免费个人形象设置..
08.最新qq空间flash代码m..
09.CSS技术结合图像实现动..
10.Photoshop光影魔术师:..
11.QQ音速种子狂刷
12.最新QQ空间透明代码
13.PS实例教程:教你制作结..
14.Photoshop光影魔术师:..
15.制作背景图__教程
16.用Photoshop制作漂亮的..
17.如何获得QQ音速种子
18.≤QQ空间代码≥在日志..
19.网页浮动广告的制作代..
20.用Photoshop制作大红灯..
21.常用CSS
22.Photoshop给靓丽美女打..
 推荐文章
·Photoshop 表现技法之..
·快速将你的相片矢量化..
·PHOTOSHOP制作炽热的太..
·用Photoshop制作美丽的..
·流行杀手的娃娃工厂__..
·打造8号台球__教程
·PHOTOSHOP制作待机MM图..
·用Photoshop帮MM做纹身..
·PHOTOSHOP美眉着色绝招..
·PHOTOSHOP花露的制作_..
·PHOTOSHOP渐变工具的巧..
·PHOTOSHOP手绘奥兰多-..
·高难度抠图两种方法__..
·Photoshop高尔夫球的制..
·Photoshop打造精美玉佩..
Eqxia_COM下载站 版权所有 Copyright© 2001-2005 Www.eqxia.COM, All Rights Reserved.