用C#开发加密狗程序
一些商务管理软件,为了防止盗版,经常使用加密狗将软件加密。下面的两个实例将介绍如何将密码写入加密狗及利用加密狗来设计加密程序。
在使用加密狗时,需要向加密狗中写入或读取数据。例如,将密码写入或读取加密狗,如何实现呢?运行本例,在文本框中设置密码后,单击【写入】按钮,即可将设置的密码写入加密狗,成功写入后,单击【读出】按钮,即可将写入的密码读出并显示在文本框中。如图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下将安装目录下的“\SafeNetChina\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 classDog
{
publicuint 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;
}
注意:本程序所使用的代码为不安全代码,正常编译是无法通过的,那么需要设置开发环境允许运行不安全代码,设置步骤为:在菜单栏中选择“项目”/“属性”/“生成”子菜单,在“生成”选项卡中选中“允许不安全代码”选项即可。
用加密狗进行身份验证
在程序开发过程中,对于一些机密的数据,开发人员需要将其有效的保护起来。例如,对于用户的密码,如果从数据库中验证用户密码,很容易被非法人员发现甚至破解。本例实现了利用加密狗进行身份验证。实例运行结果如图13.5所示本例的关键是从加密狗中读取数据,可以使用ReadDog函数实现。有关该函数的介绍请参考实例“密码写入与读出加密狗”中的“技术要点”部分。
实现过程
(1)新建一个项目,命名为Ex13_04,默认窗体为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");
}
}
}
用C#开发加密狗程序相关推荐
- 制作加密狗程序_【火腿DIY】用于SDR应用程序的自定义热键键盘 | 视障人士的选择...
Christoph用于SDR应用程序的自制自定义热键键盘 上周,我在SDRplay 社交页面上看到了Christoph Jahn的精彩文章. 克里斯托夫(Christoph)制作了一个与SDRuno一 ...
- 在InstallShield中写SuperDog加密狗程序
因为公司有个需求,需要一个安装包,只允许在一台电脑上安装,安装了之后,就无法在其他电脑安装了,我就想到了加密狗,于是就淘宝了一个safenet的超级狗superdog. 通过c#编写一个dll 先将目 ...
- 百胜服装ERP分销端使用网络加密狗
软件版本是: BSERP_CLIENT V3.12 如果有单个加密狗,可以选单机安装,序列号处填0. 分销端,可以使用加密狗序列号,就是分公司的机器使用总公司的网络狗.填完序列号进行安装,但是运行程序 ...
- php开发的程序怎么用加密狗加密,C# 简单的程序绑定、加密(类似加密狗)
[实例简介]类似加密狗的简单功能实现.使软件只能在当前电脑上使用,更换电脑后无法使用,更改系统时间也无效. [实例截图] [核心代码] using System; using System.Colle ...
- Unity3d C#实现程序的加密狗验证功能(PC)
前言 这里主要分享一下我实现的方式方法,在项目中会遇到加密狗功能,主要放置用户任意复杂产品,所以按套售卖的软件都需要这个功能. 实现方式 主要是以采购的方式实现的,自己造轮子没能力,过程可能大致一样, ...
- 使用天乐软件加密狗(JDProtect)保护您的软件,防止程序被跟踪/逆向/反编译/破解
作者:庄晓立(liigo) 日期:2011-4-8 原创链接:http://blog.csdn.net/liigo/archive/2011/04/08/6310677.aspx 转换请注明出处:ht ...
- 使用天乐软件加密狗(JDProtect)保护您的软件,防止程序被跟踪/逆向/反编译/破解...
作者:庄晓立(liigo) 日期:2011-4-8 原创链接:http://blog.csdn.net/liigo/archive/2011/04/08/6310677.aspx 转换请注明出处:ht ...
- JAVA加密狗(JAVA程序加密保护,防拷贝和防止反编译)
JAVA加密狗(JAVA程序加密保护,防拷贝和防止反编译) 众所周知,java为开发语言提供了很方便的开发平台,但开发出来的程序很容易在不同的平台上面被移植,现在越来越多的人使用它开发软件. ...
- Y6(YT699)加密狗软件锁开发工具
Y6(YT699)加密狗软件锁开发工具 一.Y6(YT699)特性 1.内置产品唯一ID及芯片自身的唯一ID 2.内置512资金数据的自定义存储 3.内置TEA增强算法,设置不同的密钥在加密狗中,对于 ...
最新文章
- [转] asp.net core Introducing View Components
- 用二维编码做特色名片!
- ubuntu-14.04 系统安装mysql-5.6.21
- 安全转移C盘空间,比如 更改Unity中默认下载在C盘的Package的保存地址
- (web前端笔记)2020-12-23(ajax)
- win11 通过winget安装/卸载v2raya的命令整理
- tensorflow,显卡驱动,CUDA傻傻分不清
- Microsoft Silverlight 4 脱机文档
- 2017中国开源年会(COSCon'17) 报名正式开启
- 程序员面试金典 - 面试题 16.11. 跳水板(数学)
- 211高校博士生入住隔离宿舍,疫情防控下科研进度不能停!
- 计算机基础与c语言试题及答案,2017年9月计算机二级C语言基础试题及答案
- css盒子模型实验报告总结_前端知识点总结——盒子模型
- SPSS神经网络心得(一)
- 做硬件真的没有前途吗?看看资深工程师是怎么说的
- 光电信息科学与工程学c语言吗,光电信息工程专业排名_光电信息科学与工程专业可以考什么专业的研究生...
- 手机android版本2.3.6可以安装哪个版本的音乐播放器,喜马拉雅fm老版本2.3.6下载...
- 介绍一款可悬浮的截图软件
- 量化交易软件 python_摄入量
- 2021-11-11 2021年工具钳工(高级)考试资料及工具钳工(高级)考试试卷
热门文章
- 计算机毕业设计 SSM汽车维修保养平台 汽车维修维护平台 汽车信息管理系统Java Vue MySQL数据库 远程调试 代码讲解
- 接口开发任务完成中(待续)
- Google Alphabet
- 如何做抖音自媒体?这些小技巧一定要掌握
- 5G助威云游戏前哨战,科技公司竞逐游戏界“Netflix”名号
- java lisp_AI编程:5种最流行的人工智能编程语言!
- 【开发环境】(基于Hexo)个人博客主题(Hexo Fluid)更换
- String字符串中数字排序(Java)
- Idea 中出现:运行 Test 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行。
- 向腾讯企业邮箱发送邮件失败,报错: 559