Microsoft .NET 中的简化加密__教程 |
|
日期:2007-5-20 1:15:08 人气:168 [大 中 小] |
|
|
|
加密练习 示例应用程序中包括一个窗体,允许您使用 DES 和 TripleDES 加密服务提供程序进行加密练习。该窗体名为 frmEncrypt,如图 3 所示。
图 3:加密算法允许您加密并解密值。
在该屏幕上,首先需要单击 Gen Key(生成密钥)按钮,然后单击 Gen IV(生成 IV)按钮。然后在 Original String(原始字符串)文本框中输入一些数据并单击 Encrypt(加密)按钮。单击 Encrypt(加密)按钮后,加密后的文本将显示在 Encrypted String(加密字符串)文本框中。如果您希望在自己的应用程序中使用这个加密的字符串,则需要记下生成的密钥和 IV,因为要解密连接字符串以便再次使用,您需要提供这两个值。如果丢失了密钥和 IV,将再也无法恢复连接字符串。
现在看一下其源代码,了解如何实现加密和解密例程。首先看一下该类的成员变量,它用于保存相应加密服务提供程序的引用。该成员变量的类型为 SymmetricAlgorithm。所有的对称算法类都是从这个基类继承而来的。
' Visual Basic .NET Private mCSP As SymmetricAlgorithm // C# private SymmetricAlgorithm mCSP; 根据您在此窗体上选择的选项按钮,此 mCSP 变量将被指定给特定的对称算法类。SetEnc() 方法将负责创建适当的类型并将其返回到不同的方法。
' Visual Basic .NET Private Function SetEnc() As SymmetricAlgorithm If optDES.Checked Then Return New DESCryptoServiceProvider Else If optTripleDES.Checked Then Return New TripleDESCryptoServiceProvider End If End If End Function
// C# private SymmetricAlgorithm SetEnc() { if(optDES.Checked) return new DESCryptoServiceProvider(); else return new TripleDESCryptoServiceProvider(); } 如您所见,根据您在该窗体上选择的选项按钮,将创建 DESCryptoServiceProvider 对象或 TripleDESCryptoServiceProvider 对象。
实现加密和解密的密钥 要使用对称算法,必须提供要使用的密钥。每个 CryptoSymmetricAlgorithm 实现都提供一种 GenerateKey 方法。它们实际上使用的是公共语言运行时 (CLR) 类中内置的随机数生成器类。我们来看一下 Gen Key(生成密钥)按钮的 Click 事件处理程序,看它如何生成要使用的随机密钥值。
' Visual Basic .NET Private Sub btnKeyGen_Click(ByVal sender As _ System.Object, ByVal e As System.EventArgs) _ Handles btnKeyGen.Click mCSP = SetEnc()
mCSP.GenerateKey()
txtKey.Text = Convert.ToBase64String(mCSP.Key) End Sub // C# private void btnKeyGen_Click(object sender, System.EventArgs e) { mCSP = SetEnc();
mCSP.GenerateKey();
txtKey.Text = Convert.ToBase64String(mCSP.Key); } 获取服务提供程序的特定实现后,只需调用 GenerateKey 方法来创建一个用于加密的新的随机密钥。密钥的大小取决于用来加密的特定提供程序。例如,DES 密钥的大小为 64 位,而 TripleDES 密钥的大小为 192 位。每个 SymmetricAlgorithm 类上都有一个 KeySize 属性,它将返回用于生成密钥的密钥大小。
我们还需要生成初始化向量 (IV)。IV 将帮助算法生成最终加密字符串的数据块。IV 用于开始第一个块的加密。如果不提供 IV,那么只要密钥相同,在字符串之间传递的通用数据将保持同一种模式。因此,需要使用 IV 作为加密数据的“随机”组件。通过这种方式,只要使用的 IV 不同,即使密钥相同,同一个数据也会被加密成完全不同的值。下面是生成新的 IV 的 Gen IV(生成 IV)按钮的源代码。
' Visual Basic .NET Private Sub btnIVGen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIVGen.Click mCSP.GenerateIV()
txtIV.Text = Convert.ToBase64String(mCSP.IV) End Sub
// C# private void btnIVGen_Click(object sender, System.EventArgs e) { mCSP.GenerateIV();
txtIV.Text = Convert.ToBase64String(mCSP.IV); } 此代码看起来与生成密钥的代码非常相似。每个加密服务提供程序类上都有一个 GenerateIV() 方法。如果未提供 IV,该方法将生成一个 IV。
加密数据 获得密钥和初始化向量后,现在可以使用 Key、IV 和 Original String 值来创建原始字符串值的加密版本。单击 Encrypt(加密)按钮将运行以下代码。 |
|
出处:本站原创 作者:佚名 |
|
|