1. | 啟動 Visual Studio.NET,並建立名為 EncryptionTestApp 的新 Visual C# Windows 專案。 |
2. | 加入 Encryption.dll 組件的組件參考。
若要建立此組件,您必須執行本手冊中<How To:建立加密程式庫>所描述的步驟。 |
3. | 將下列 using 陳述式加入 Form1.cs 頂端,放在現有 using 陳述式之下。 using Encryption;
using System.Text;
using Microsoft.Win32;
|
4. | 將表 1 中的控制項加入 Form1,並如圖 1 所示排列。 表 1:EncryptionTestApp 控制項 Label | 連接字串: | | TextBox | | txtConnectionString | Label | 金鑰: | | TextBox | | txtKey | Label | 初始化向量: | | TextBox | | txtInitializationVector | Label | 已加密的字串 | | TextBox | | txtEncryptedString | Label | 已解密的字串 | | TextBox | | txtDecryptedString | Button | 加密 | btnEncrypt | Button | 解密 | btnDecrypt | Button | 寫入登錄資料 | btnWriteRegistryData |
![[加密測試控管] 對話方塊](http://img.microsoft.com/taiwan/msdn/security/guidance/ASPNET/content/images/secmod25_01.jpg) 圖 1 [加密測試控管] 對話方塊 |
5. | 將 txtConnectionString 的 Text 屬性設為 "Server=local; database=pubs; uid=林曉峰; pwd=Password"
|
6. | 將 txtKey 的 Text 屬性設為 "0123456789012345"
該金鑰長度為 16 位元組,以配合 Triple DES 加密演算法。 |
7. | 將 Form1 的 Text 屬性設為 "加密測試控管"
|
8. | 按兩下 [加密] 按鈕,以建立按鈕啟動事件處理常式,並將下列程式碼加入事件處理常式。 try
{
// 建立 Encryptor 物件,指定 3DES 作為
// 加密演算法
Encryptor enc = new Encryptor(EncryptionAlgorithm.TripleDes);
// 取得連接字串,作為位元組陣列
byte[] plainText = Encoding.ASCII.GetBytes(txtConnectionString.Text);
byte[] key = Encoding.ASCII.GetBytes(txtKey.Text);
// 執行加密
byte[] cipherText = enc.Encrypt(plainText, key);
// 儲存初始化向量,您需要使用它來
// 進行解密
txtInitializationVector.Text = Encoding.ASCII.GetString(enc.IV);
// 顯示加密的字串
txtEncryptedString.Text = Convert.ToBase64String(cipherText);
}
catch(Exception ex)
{
MessageBox.Show("加密時發生例外狀況:" + ex.Message,
"加密測試控管");
}
|
9. | 返回「設計工具」模式中的 Form1,並按兩下 [解密] 按鈕,以建立按鈕啟動事件處理常式。 |
10. | 將下列程式碼加入 [解密] 按鈕事件處理常式。 try
{
// 設定 Decryptor 物件
Decryptor dec = new Decryptor(EncryptionAlgorithm.TripleDes);
// 設定初始化向量
dec.IV = Encoding.ASCII.GetBytes(txtInitializationVector.Text);
byte[] key = Encoding.ASCII.GetBytes(txtKey.Text);
// 執行解密
byte[] plainText = dec.Decrypt(Convert.FromBase64String(
txtEncryptedString.Text),
key);
// 顯示解密的字串。
txtDecryptedString.Text = Encoding.ASCII.GetString(plainText);
}
catch(Exception ex)
{
MessageBox.Show("解密時發生例外狀況。" + ex.Message,
"加密測試控管");
}
|
11. | 返回「設計工具」模式中的 Form1,並按兩下 [寫入登錄資料] 按鈕,以建立按鈕啟動事件處理常式。 |
12. | 將下列程式碼加入事件處理常式。 // 建立登錄機碼及名稱值
RegistryKey rk = Registry.LocalMachine.OpenSubKey("Software",true);
rk = rk.CreateSubKey("TestApplication");
// 將加密的字串、初始化向量及金鑰寫入登錄
rk.SetValue("connectionString",txtEncryptedString.Text);
rk.SetValue("initVector",Convert.ToBase64String(
Encoding.ASCII.GetBytes(txtInitializationVector.Text)));
rk.SetValue("key",Convert.ToBase64String(Encoding.ASCII.GetBytes(
txtKey.Text)));
MessageBox.Show("資料已成功寫入登錄");
|
13. | 執行應用程式,再按一下 [加密]。 加密的連接字串會顯示在 [已加密的字串] 欄位中。 |
14. | 按一下 [解密]。
原始字串會顯示在 [已解密的字串] 欄位中。 |
15. | 按一下 [寫入登錄資料]。 |
16. | 在訊息方塊中按一下 [確定]。 |
17. | 執行 regedit.exe 並檢視下列機碼的內容。 HKLM\Software\TestApplication
確認 connectionString、initVector 及 key 名稱值都是經過編碼的值。 |
18. | 關閉 regedit 及測試控管應用程式。 |