国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

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

2024-07-21 02:23:25
字體:
來源:轉載
供稿:網友
目標
本章的目標是:

• 在注冊表中存儲加密的數據庫連接字符串

• 從注冊表中讀取加密的數據庫連接字符串并對其進行解密。


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

• 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 章數據訪問安全性中的安全存儲數據庫連接字符串。其中介紹了一些用于安全存儲數據庫連接字符串的技術。


返回頁首
摘要
如果開發人員所編寫的應用程序需要訪問數據庫,那么他們都將面臨一個相同的問題,即在哪個位置安全存儲數據庫連接字符串。注冊表為他們提供了一種選擇。不過,盡管使用訪問控制列表 (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 窗體上就會顯示加密和解密的連接字符串。



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

商業源碼熱門下載www.html.org.cn

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岳西县| 霍邱县| 张北县| 闻喜县| 连城县| 澄城县| 阳信县| 定兴县| 天门市| 绥宁县| 定结县| 罗城| 宁都县| 勐海县| 永清县| 五大连池市| 双桥区| 永春县| 龙泉市| 新郑市| 佛教| 蒲城县| 晋州市| 大新县| 梁山县| 蒲城县| 荔波县| 昭觉县| 慈溪市| 文登市| 阜城县| 成安县| 大连市| 肥城市| 广东省| 东乌珠穆沁旗| 剑阁县| 平谷区| 商洛市| 新巴尔虎左旗| 崇州市|