程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 項目中使用加密狗概述

項目中使用加密狗概述

編輯:關於C#

今天看了一下項目中涉及到的知識點,察覺到該項目中裡邊有許多知識以前從未接觸過,順便將其整理 下來.

加密狗

主要是用來加密個人重要的數據.我們對其的操作主要就是讀寫加密狗裡邊的信息.

介紹一下賽孚耐信息技術有限公司的加密狗產品,該產品提供了.NET中非托管的類庫,來完成加密狗 的數據讀寫功能。

● DogWrite 函數(寫如加密狗)

 [DllImport("Win32dll.dll", CharSet = CharSet.Ansi)]

    public static unsafe extern uint DogWrite(uint idogBytes, uint idogAddr, byte* pdogData);

將PdogData指向的數據塊寫入加密狗中,從idogAddr處開始,長度共長idogBytes.

參數說明如下。

l  idogAddr:對軟件狗讀寫操作時用戶區中的首地址。取值范圍為0~99。

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  idogAddr:對軟件狗讀寫操作時用戶區中的首地址。取值范圍為0~99。

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\”文件夾中。

也不知道其他公司產品的加密狗的原理是不是也是這樣的,不過我感覺加密狗的基本原理都是這樣的, 公司提供加密狗的API接口.只不過不同的公司所提供的API接口不一樣罷了.

實例:

C#:

using System.Runtime.InteropServices ;

加密狗類:

public unsafe class Dog

{

     public uint DogBytes, DogAddr;  //設置加密狗字節長度和起始地址

     public byte[] DogData;  //設置數據的長度

     public uint Retcode;

     [DllImport("Win32dll.dll", CharSet = CharSet.Ansi)]

     public static unsafe extern uint DogRead(uint idogBytes, uint idogAddr, byte* pdogData);

     [DllImport("Win32dll.dll", CharSet = CharSet.Ansi)]

     public static unsafe extern uint DogWrite(uint idogBytes, uint idogAddr, byte* pdogData);

     public unsafe Dog(ushort num)

     {

         DogBytes = num;

        DogData = new byte[DogBytes]; //設置數據的長度

     }

     public unsafe void ReadDog()

     {

         fixed (byte* pDogData = &DogData[0])

         {

             Retcode = DogRead(DogBytes, DogAddr, pDogData);  //將數據讀出加密狗

         }

     }

     public unsafe void WriteDog()

     {

         fixed (byte* pDogData = &DogData[0])

         {

             Retcode = DogWrite(DogBytes, DogAddr, pDogData); //將數據寫入加密狗

         }

    }

}

向加密狗裡邊寫入數據:Dog d=new Dog(10);d.DogAddr=0;for(int i=0;i<d.DogData.length;i++)d.DogData[i]=i;d.WriteDog();

讀取加密狗裡邊的數據:Dog d=new Dog(10);byte[] b;d.ReadDog();b=new byte [d.DogData.length];

for (int i=0;i<d.DogData.lengh;i++)b[i]=d.DogData[i];

extern:表明我們用到的該方法是在外部聲明的,即該方法是在win32dll.dll程序集裡邊;

unsafe:表明該加密狗類是不安全的.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved