加密狗

原创 2007年09月27日 09:01:00

13.2  加 密 狗

一些商务管理软件,为了防止盗版,经常使用加密狗将软件加密。下面的两个实例将介绍如何将密码写入加密狗及利用加密狗来设计加密程序。

实例420 密码写入与读出加密狗

实例说明

在使用加密狗时,需要向加密狗中写入或读取数据。例如,将密码写入或读取加密狗,如何实现呢?运行本例,在文本框中设置密码后,单击【写入】按钮,即可将设置的密码写入加密狗,成功写入后,单击【读出】按钮,即可将写入的密码读出并显示在文本框中。如图13.4所示。

文本框: 图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     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。

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 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); //将数据写入加密狗

        }

    }

}

调用加密狗类,进行加密狗的读写功能,代码如下:

        private void button1_Click_1(object sender, EventArgs e)

        {

            Dog dog = new Dog(100);

            dog.DogAddr = 0;        

            dog.DogBytes = 10;   

            string str = textBox1.Text;

            for (int i = 0; i < str.Length; i++)

            {

                dog.DogData[i] = (byte)str[i];

            }

            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)

        {

            Dog dog = new Dog(100);

            dog.DogAddr = 0;       

            dog.DogBytes = 10;   

            dog.ReadDog();

            if (dog.Retcode == 0)   //开始读加密狗数据

            {

                char[] chTemp = new char[textBox1.Text.Length];

                for (int i = 0; i < textBox1.Text.Length; i++)

                {

                    chTemp[i] = (char)dog.DogData[i];

                }

                String str = new String(chTemp);

                textBox2.Text = str;

            }

            else

            {

                textBox2.Text = "2:" + dog.Retcode;

            }

            textBox1.ReadOnly = false;

            button2.Enabled = false;

            button1.Enabled = true;

        }

 注意:本程序所使用的代码为不安全代码,正常编译是无法通过的,那么需要设置开发环境允许运行不安全代码,设置步骤为:在菜单栏中选择“项目”/“属性”/“生成”子菜单,在“生成”选项卡中选中“允许不安全代码”选项即可。

举一反三

根据本实例,读者可以开发以下程序。

*  利用加密狗加密自己的软件。

*  利用加密狗设计控制计算机使用的程序。

实例421 使用加密狗进行身份验证

实例说明

在程序开发过程中,对于一些机密的数据,开发人员需要将其有效的保护起来。例如,对于用户的密码,如果从数据库中验证用户密码,很容易被非法人员发现甚至破解。本例实现了利用加密狗进行身份验证。实例运行结果如图13.5所示。

文本框: 图13.5  使用加密狗进行身份验证技术要点

本例的关键是从加密狗中读取数据,可以使用ReadDog函数实现。有关该函数的介绍请参考实例“密码写入与读出加密狗”中的“技术要点”部分。

实现过程

(1)新建一个项目,命名为Ex13_03,默认窗体为Form1。

(2)在Form1窗体中,主要添加两个Button控件,用于数据验证和退出程序,添加两个TextBox控件,分别用于输入用户名称和密码。

(3)主要程序代码。

        private void button1_Click(object sender, EventArgs e)

        {

            Dog dog = new Dog(100);

            dog.DogAddr = 0;       

            dog.DogBytes = 6;           

            dog.ReadDog();

            if (dog.Retcode == 0)

            {

                char[] chTemp = new char[6];

                for (int i = 0; i < 6; i++)

                {

                    chTemp[i] = (char)dog.DogData[i];

                }

                String str = new String(chTemp);

                if (textBox2.Text==str)

                {

                    MessageBox.Show("OK");

                }

                else

                {

                    MessageBox.Show("error");

                }

            }

        }

举一反三

根据本实例,读者可以实现以下功能。

*  利用加密狗设计加密软件。

*  使用加密狗控制用户使用权限。

 

加密利器——加密狗

加密狗是外形酷似U盘的一种硬件设备,正名加密锁,后来发展成如今的一个软件保护的通俗行业名词,"加密狗"是一种插在计算机并行口上的软硬件结合的加密产品(新型加密狗也有usb口的)。 加密狗通过在软件执...
  • linksafe2014
  • linksafe2014
  • 2016年01月22日 14:24
  • 716

加密狗的简单实用

加密狗的应用意义不言而喻,它代表着一个软件的使用限制,没有加密狗则不允许使用本软件。 那么我们该怎样利用加密狗进行软件的加密呢? 一.首先是购买加密狗,买到的加密狗会附带一张光盘,光盘里有驱动程序...
  • XBLYWL
  • XBLYWL
  • 2016年07月04日 08:18
  • 938

利用个人U盘制作简易加密狗

首先声明下,虽然使用了简易加密狗制作这样的标题,不过娱乐的成份居多,网上出售的程序加密狗哪怕是最简单的都比本文提到的原理复杂。商业的加密狗中除了软件开发者在程序里经常检查dongle中的单元(Cell...
  • wang1144
  • wang1144
  • 2012年06月23日 17:29
  • 7891

加密狗

13.2  加 密 狗一些商务管理软件,为了防止盗版,经常使用加密狗将软件加密。下面的两个实例将介绍如何将密码写入加密狗及利用加密狗来设计加密程序。实例420 密码写入与读出加密狗实例说明在使用加密狗...
  • lmllouk
  • lmllouk
  • 2007年09月27日 09:01
  • 2347

加密狗读取代码

  • 2011年10月16日 18:52
  • 2KB
  • 下载

加密狗坏了怎么办?

答:加密狗坏了也千万不能丢掉,要把坏的加密狗寄回总部维修,或者是更换。...
  • xingke199
  • xingke199
  • 2012年11月12日 16:49
  • 516

模拟美萍加密狗--Rockey2虚拟狗(一)

最近受朋友之托做了一个美萍智能电源控制的插件。美萍茶楼从2010版开始支持智能电源控制设备,就是开单、结账时自动开关相应房间的电器,不过官方的设备是有线的。朋友的店已经开了一段时间了,重新走线既影响正...
  • douniwan5788
  • douniwan5788
  • 2012年02月22日 13:15
  • 18239

加密狗

加密锁"(也称加密狗)最早由彩虹天地开发,现在已成为软件加密行业的代名词。加密锁是一种插在计算机并行口上的软硬件结合的加密产品(新型加密锁也有usb口的)。一般都有几十或几百字节的非易失性存储空间可供...
  • blncle
  • blncle
  • 2011年11月06日 21:57
  • 507

软件加密狗

  • 2012年11月13日 17:00
  • 96KB
  • 下载

软件加密狗简单实现

  最近有个项目,老板提出来说要给软件加上加密狗,给用户一些使用限制。没法子,老板怎么说就得怎么做了。起初还以为加密狗不是一个简单的东西,接触后才知其实是很容易实现的。现在对加密狗的具体使用做一个记录...
  • ruiqi317
  • ruiqi317
  • 2011年06月11日 20:13
  • 1814
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:加密狗
举报原因:
原因补充:

(最多只允许输入30个字)