用C 開發加密狗程式

2022-02-09 09:53:26 字數 3091 閱讀 5622

一些商務管理軟體,為了防止盜版,經常使用加密狗將軟體加密。下面的兩個例項將介紹如何將密碼寫入加密狗及利用加密狗來設計加密程式。

在使用加密狗時,需要向加密狗中寫入或讀取資料。例如,將密碼寫入或讀取加密狗,如何實現呢?執行本例,在文字框中設定密碼後,單擊【寫入】按鈕,即可將設定的密碼寫入加密狗,成功寫入後,單擊【讀出】按鈕,即可將寫入的密碼讀出並顯示在文字框中。如圖13.4所示。

在購買加密狗時,廠家通常會附帶有開發手冊和一張光碟。開發手冊中介紹了加密狗的使用方法和開發資料。本例使用賽孚耐資訊科技****的加密狗產品,該產品提供了.net中非託管的類庫,來完成加密狗的資料讀寫功能。下面介紹有關加密狗的類庫中的讀寫函式。

● dogwrite 函式

該函式將pdogdata指向的資料寫入加密狗中,從dogaddr位址開始寫入,到dogbytes位址停止。

函式宣告如下:

[dllimport("win32dll.dll", charset = charset.ansi)]

public static unsafe extern uint dogwrite(uint idogbytes, uint idogaddr, byte* pdogdata);

引數說明如下。

l     idogbytes:對軟體狗讀寫操作時的位元組長度。讀寫時取值範圍為1~100,並且與idogaddr之和不能超過100。

l     pdogdata:指標型變數。指向讀寫操作或變換的資料緩衝區。

l     返回值:0表示操作成功,其他值是錯誤碼。

● dogread函式

該函式從加密狗中的idogaddr開始的儲存區讀出資料,存入pdogdata指定的緩衝區,讀出位元組數為idogbytes。切記,緩衝區大小要足夠長。

函式宣告如下:

[dllimport("win32dll.dll", charset = charset.ansi)]

public static unsafe extern uint dogread(uint idogbytes, uint idogaddr, byte* pdogdata);

引數說明如下。

l     idogbytes:對軟體狗讀寫操作時的位元組長度。讀寫時取值範圍為1~100,並且與idogaddr之和不能超過100。

l     pdogdata:指標型變數。指向讀寫操作或變換的資料緩衝區。

l     返回值:0表示操作成功,其他值是錯誤碼。

注意以下幾點。

在使用這個函式之前,必須將隨加密狗附帶的安裝程式安裝完整,並將安裝目錄下的win32dll.dll檔案複製到系統目錄下。例如:

在windows 2003下將安裝目錄下的「\safenet china\softdog sdk v3.1\win32\win32dll\highdll\ win32dll.dll」檔案複製到「c:\windows\system32\」資料夾中。

實現過程

(1)新建乙個專案,命名為ex13_03,預設窗體為form1。

(2)在form1窗體中,主要新增兩個button控制項,用於執行向加密狗資料的寫入與讀出資料,新增兩個textbox控制項,分別用於填寫向加密狗中寫入的資料和顯示讀取加密狗中的資料。

(3)主要程式**。

設定加密狗類,並且完善加密狗的讀寫功能,**如下:

[structlayout(layoutkind.sequential)]

//這個類用於讀寫加密狗

public unsafe class dog

public unsafe void readdog()

}public unsafe void writedog()}}

呼叫加密狗類,進行加密狗的讀寫功能,**如下:

private void button1_click_1(object sender, eventargs e)

dog.writedog();

messagebox.show("密碼已成功寫入加密狗!", "成功提示!", messageboxbuttons.ok, messageboxicon.information);

textbox1.readonly = true;

button1.enabled = false;

button2.enabled = true;

}private void button2_click_1(object sender, eventargs e)

string str = new string(chtemp);

textbox2.text = str;

}else

textbox1.readonly = false;

button2.enabled = false;

button1.enabled = true;

}注意:本程式所使用的**為不安全**,正常編譯是無法通過的,那麼需要設定開發環境允許執行不安全**,設定步驟為:在選單欄中選擇「專案」/「屬性」/「生成」子選單,在「生成」選項卡中選中「允許不安全**」選項即可。

用加密狗進行身份驗證

在程式開發過程中,對於一些機密的資料,開發人員需要將其有效的保護起來。例如,對於使用者的密碼,如果從資料庫中驗證使用者密碼,很容易被非法人員發現甚至破解。本例實現了利用加密狗進行身份驗證。例項執行結果如圖13.5所示本例的關鍵是從加密狗中讀取資料,可以使用readdog函式實現。有關該函式的介紹請參考例項「密碼寫入與讀出加密狗」中的「技術要點」部分。

實現過程

(1)新建乙個專案,命名為ex13_04,預設窗體為form1。

(2)在form1窗體中,主要新增兩個button控制項,用於資料驗證和退出程式,新增兩個textbox控制項,分別用於輸入使用者名稱和密碼。

(3)主要程式**。

private void button1_click(object sender, eventargs e)

string str = new string(chtemp);

if (textbox2.text==str)

else}}

用C 開發加密狗程式

一些商務管理軟體,為了防止盜版,經常使用加密狗將軟體加密。下面的兩個例項將介紹如何將密碼寫入加密狗及利用加密狗來設計加密程式。在使用加密狗時,需要向加密狗中寫入或讀取資料。例如,將密碼寫入或讀取加密狗,如何實現呢?執行本例,在文字框中設定密碼後,單擊 寫入 按鈕,即可將設定的密碼寫入加密狗,成功寫入...

用C 開發加密狗程式

一些商務管理軟體,為了防止盜版,經常使用加密狗將軟體加密。下面的兩個例項將介紹如何將密碼寫入加密狗及利用加密狗來設計加密程式。在使用加密狗時,需要向加密狗中寫入或讀取資料。例如,將密碼寫入或讀取加密狗,如何實現呢?執行本例,在文字框中設定密碼後,單擊 寫入 按鈕,即可將設定的密碼寫入加密狗,成功寫入...

用C 開發加密狗程式

一些商務管理軟體,為了防止盜版,經常使用加密狗將軟體加密。下面的兩個例項將介紹如何將密碼寫入加密狗及利用加密狗來設計加密程式。在使用加密狗時,需要向加密狗中寫入或讀取資料。例如,將密碼寫入或讀取加密狗,如何實現呢?執行本例,在文字框中設定密碼後,單擊 寫入 按鈕,即可將設定的密碼寫入加密狗,成功寫入...