如何在註冊表中儲存加密的連接字串

來源:互聯網
上載者:User
加密|註冊表|字串 目標
本章的目標是:

• 在註冊表中儲存加密的資料庫連接字串

• 從註冊表中讀取加密的資料庫連接字串並對其進行解密。


返回頁首
適用範圍
本章適用於以下產品和技術:

• Microsoft Windows XP 或 Windows 2000 Server (Service Pack 3) 以及更高版本的作業系統

• Microsoft .net Framework 版本 1.0 (Service Pack 2) 以及更高版本

• Microsoft Visual C#® .net


返回頁首
如何使用本章內容
若要學好本章內容:

• 您必須具有使用 Visual C# .net 進行編程的經驗。

• 您必須具有使用 Microsoft Visual Studio® .net 進行編程的經驗。

• 您必須具有使用 ASP.NET 開發 Web 應用程式的經驗。

• 按照如何建立加密庫中所述建立常規加密庫。此加密庫所提供的功能在本章中用於為資料庫連接字串加密和解密。

• 請閱讀第 12 章資料訪問安全性中的Secure Store 資料庫連接字串。其中介紹了一些用於Secure Store 資料庫連接字串的技術。


返回頁首
摘要
如果開發人員所編寫的應用程式需要訪問資料庫,那麼他們都將面臨一個相同的問題,即在哪個位置Secure Store 資料庫連接字串。註冊表為他們提供了一種選擇。不過,儘管使用存取控制清單 (ACL) 可保護單個登錄機碼的安全,但為了提高安全性,您應該先對連接字串加密,然後才將其儲存。

本章介紹如何將經過加密的資料庫連接字串儲存在註冊表中,以及如何從 ASP.NET Web 應用程式中檢索它。它會用到您在如何建立加密庫中建立的那個常規加密庫。

返回頁首
您必須瞭解的背景知識
在開始學習本章之前,您應該知道:

• 用於加密的連接字串、初始化向量和密鑰將作為命名值儲存在註冊表中的以下登錄機碼下面。

HKEY_LOCAL_MACHINE\Software\TestApplication


• 必須儲存初始化向量和密鑰以便對連接字串進行解密。


返回頁首
將加密資料儲存在註冊表中
此過程會建立一個 Windows 應用程式,用來為樣本資料庫字串加密並將該字串儲存在註冊表中。

• 在註冊表中儲存加密資料

1.
啟動 Visual Studio .net,並建立一個新的名為 EncryptionTestApp 的 Visual C# 項目。

2.
添加對 Encryption.dll 程式集的引用。
要建立此程式集,必須執行本指南中如何建立加密庫中所述的步驟。

3.
將下面的 using 語句添加到 Form1.cs 頂部現有 using 語句的下方。

using Encryption;
using System.Text;
using Microsoft.Win32;


4.
將表 1 中的控制項加入 Form1,並如圖 1 所示對它們進行排列。

表 1:EncryptionTestApp 控制項

控制項 文本 ID
標籤
連接字串:


文字框

txtConnectionString

標籤
密鑰:


文字框

txtKey

標籤
初始化向量:


文字框

txtInitializationVector

標籤
加密字串


文字框

txtEncryptedString

標籤
解密字串


文字框

txtDecryptedString

按鈕
加密
btnEncrypt

按鈕
解密
btnDecrypt

按鈕
寫入註冊表資料
btnWriteRegistryData



圖 1
“加密測試套”對話方塊

5.
將 txtConnectionString 的 Text 屬性設定為

"Server=local; database=pubs; uid=Bob; pwd=Password"


6.
將 txtKey 的 Text 屬性設定為

"0123456789012345"

密鑰長度為 16 個位元組以滿足三重 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 和測試套應用程式。



返回頁首
建立 ASP.NET Web 應用程式
此過程開發一個簡單的 ASP.NET Web 應用程式,它將從註冊表中檢索加密的連接字串並對它進行解密。

• 建立 ASP.NET 應用程式

1.
建立一個名為 EncryptionWebApp 的新 Visual C# ASP.NET Web 應用程式。

2.
添加對 Encryption.dll 程式集的引用。
要建立此程式集,必須執行本指南中如何建立加密庫中所述的步驟。

3.
開啟 Webform1.aspx.cs,並將下面的 using 語句添加到檔案頂部現有 using 語句的下面。

using Encryption;
using System.Text;
using Microsoft.Win32;


4.
將表 2 中所列的控制項添加到 WebForm1.aspx 中。

表 2:WebForm1.aspx 控制項

控制項 文本 ID
標籤

lblEncryptedString

標籤

lblDecryptedString

按鈕
擷取連接字串
btnGetConnectionString


5.
雙擊“擷取連接字串”按鈕,建立一個按鈕單擊事件處理常式。

6.
將下面的代碼添加到該事件處理常式中。

RegistryKey rk = Registry.LocalMachine.OpenSubKey(
@"Software\TestApplication",false);
lblEncryptedString.Text = (string)rk.GetValue("connectionString");

string initVector = (string)rk.GetValue("initVector");
string strKey = (string)rk.GetValue("key");

Decryptor dec = new Decryptor(EncryptionAlgorithm.TripleDes );
dec.IV = Convert.FromBase64String(initVector);

// 解密字串
byte[] plainText = dec.Decrypt(Convert.FromBase64String(
lblEncryptedString.Text),
Convert.FromBase64String(strKey));

lblDecryptedString.Text = Encoding.ASCII.GetString(plainText);


7.
在“產生”菜單上,單擊“產生解決方案”。

8.
在方案總管中按右鍵 WebForm1.aspx,然後單擊“在瀏覽器中查看”。

9.
單擊“擷取連接字串”。
此時,在 Web Form上就會顯示加密和解密的連接字串。



返回頁首
其他資源
有關詳細資料,請參見本指南的如何建立加密庫。



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。