Microsoft .NET 中的简化加密__教程 |
|
日期:2007-5-20 1:15:08 人气:168 [大 中 小] |
|
|
|
在用户密码中添加盐值的方法有多种。最简单的方法是摘取用户的某些信息(例如姓、名、电子邮件地址或员工 ID)并将其添加到用户密码中,然后再进行加密。这种方法的缺点是,因为您需要存储盐值,所以如果黑客找到该值,将会对您所做的一切操作了如指掌。当然,黑客需要花费额外的时间来破解盐值,但这对黑客来说简直是易如反掌。
另外一种方法是使用 .NET Framework 类 RNGCryptoServiceProvider 创建一个随机的数字字符串。RNG 表示随机数生成器。该类可以创建一个任意长度的随机字节数组,长度由您指定。您可以使用此随机字节数组作为散列算法的盐值。要采用这种方法,必须安全地存储该盐值。
在图 2 所示的示例中,您需要在文本框中输入一个字符串,选择特定的散列类型,然后生成盐值以及包含该盐值和原始字符串的散列值。
图 2:在散列值中添加盐值以创建更安全的密码散列 (需要存储盐值以便再次创建相同的散列。)
该示例与本文中的上一个示例基本相同,不同之处在于创建盐值的例程。在此屏幕上的按钮的 Click 事件下,首先调用一个名为 CreateSalt() 的方法来生成一个唯一的盐值,然后将该值存储到 txtSalt 文本框中。获得唯一的盐值后,再调用 HashString() 方法,将这两个值结合起来。
' Visual Basic .NET Private Sub btnHash_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnHash.Click txtSalt.Text = CreateSalt() txtHashed.Text = HashString(txtSalt.Text & _ txtOriginal.Text) End Sub
// C# private void cmdHash_Click(object sender, System.EventArgs e) { txtSalt.Text = CreateSalt(); txtHashed.Text = HashString(txtOriginal.Text); } CreateSalt() 方法的代码非常简单。它首先创建一个长度为 8 个字节的字节数组,然后您创建一个新的 RNGCryptoServiceProvider 类实例。使用该对象的 GetBytes() 方法,将生成的随机字符集填充到字节数组中。然后将此字节数组转换成 Base64 编码字符串并从该函数返回。
' Visual Basic .NET Private Function CreateSalt() As String Dim bytSalt(8) As Byte Dim rng As New RNGCryptoServiceProvider
rng.GetBytes(bytSalt)
Return Convert.ToBase64String(bytSalt) End Function
// C# private string CreateSalt() { byte[] bytSalt = new byte[8]; RNGCryptoServiceProvider rng;
rng = new RNGCryptoServiceProvider();
rng.GetBytes(bytSalt);
return Convert.ToBase64String(bytSalt); } 数据加密是一个双行道 如果需要在两个或多个人员或计算机之间来回发送信息,并希望对方能够读取数据,而其他人不可以读取,那么加密则是最好的方式!加密算法使您可以将数据掩盖起来,除了特定人员能够对其解密外,其他人员不大可能通过数学方法读取该数据。但如果您希望某个人能够读取该数据,您可以为其提供一个特定的“密钥”,使其能够解密并读取数据。.NET Framework 中有多种可用的加密/解密算法。本文主要介绍对称算法,包括以下几种:
DES RC2 Rijndael TripleDES 对称算法(或密钥算法)使用一个密钥和一个初始化向量 (IV) 来保证数据的安全。使用该数据的双方都必须知道这个密钥和初始化向量才能够加密和解密数据。必须确保该密钥的安全,否则其他人将有可能解密该数据并读取该消息。初始化向量只是一个随机生成的字符集,使用它可以确保任何两个文本都不会生成相同的加密数据。使用 .NET 中不同的加密类的内置方法可以导出密钥,至于如何导出密钥,则不属于本文要讨论的内容。
其他类型的加密算法称为不对称算法。不对称算法使用公钥/私钥对来创建加密数据。不对称算法将在下文进行讨论。
如何在不同的情况下选择不同的加密方法 对称算法(或密钥算法)的速度非常快,非常适于加密大型的数据流。这些算法可以加密数据,也可以解密数据。它们都相当安全,但如果有足够的时间,也可能会被破密,因为有人可能会搜索每个已知的密钥值组合。由于每种算法都使用固定的密钥长度或 ASCII 字符,因此计算机程序可以尝试每个可能的密钥组合并最终找到正确的那个组合。这些类型的算法一般用于存储和检索数据库的连接字符串。
不对称算法(或公钥算法)没有对称算法快,但其代码较难破密。这些算法取决于两个密钥,一个是私钥,另一个是公钥。公钥用来加密消息,私钥是可以解密该消息的唯一密钥。公钥和私钥通过数学方法链接在一起,因此要成功进行加密交换,必须获得这两个密钥。由于可能会影响到计算机性能,因此不对称算法不太适用于加密大量数据。不对称算法的常见用法是将对称密钥和初始化向量加密并传输给对方。然后在双方之间来回发送的消息中使用对称算法加密和解密数据。
如果您不打算再恢复原始值,尤其不希望别人发现原始值,那么请使用散列值。散列可以将任意长度的字符串加密为固定的字节集。此操作是单向的,因此通常用于密码这样的少量数据。当用户在安全的输入屏幕上输入用户密码后,程序将对此密码进行加密并将散列值存储到数据库中。即使数据库泄漏,也没有人能够读取密码,因为密码已被加密。当用户登录到该系统进行输入时,将使用相同的算法解密用户键入的密码,如果两个散列值相匹配,系统则可以确定用户输入的值与以前存储的值相同。 |
|
出处:本站原创 作者:佚名 |
|
|