加密狗授权方式介绍
每只加密狗都有一个固定的序列号,并且一般是无法修改的。软件运行时读取加密狗的序列号进行判断,序列号通过验证后才能正常使用软件。
选购一套加密狗开发套件
我选购了SaftNet的USB软件狗,入手后查阅开发资料(不同品牌的加密狗开发资料一般都不同),整理需要用到的开发资源如下:
- SoftDogSetup.dll:提供加密狗驱动相关操作的DLL
需要用到以下方法:
(1)获取狗驱动程序安装信息接口函数GetDogDriverInfo,定义如下:
int PASCAL GetDogDriverInfo();
参数:无
返回值:
0 没有安装驱动程序
1 驱动版本相同(并口和usb)
2 USB驱动版本相同
3 并口驱动版本相同
4 已安装旧版本驱动 (并口和usb)
5 已安装旧版本USB驱动
6 已安装旧版本并口驱动
7 已安装新版本驱动 (并口和usb)
8 已安装新版本USB驱动
9 已安装新版本并口驱动
3008 没有管理员权限
(2)驱动安装的函数接口InstDriver,定义如下:
Int PASCAL InstDriver(int iFlag);
参数:
iFlag = 1 只安装USB狗驱动
iFlag = 2 只安装并口狗驱动
iFlag = 3 安装并口狗驱动和USB狗驱动
返回值:
如果运行成功则返回0,否则返回错误值。
(3)驱动卸载的函数接口UninstallDriver,定义如下:
int PASCAL UninstallDriver(int iFlag);
参数:
iFlag = 1 只卸载USB狗驱动
iFlag = 2 只卸载并口狗驱动
iFlag = 3 卸载并口狗驱动和USB狗驱动
返回值:
如果运行成功则返回0,否则返回错误值。
- win32dll.dll:提供加密狗读写操作的DLL
需要用到以下方法:
(1)DWORD WINAPI DogRead (DWORD dwBytes,DWORD dwAddr,char *pData);
函数返回0表示读写成功,其它返回值为错误代码。
变量说明:
DWORD dwBytes:每次变换或读写操作的字节数
DWORD dwAddr:每次读写操作时狗中的首地址
char * pData :指向变换操作缓冲区的数据指针
实现加密狗授权(C#)
定义SoftDog类
首先定义一个SoftDog的静态类,静态类的主要特点如下:
- 它们仅包含静态成员。
- 它们不能被实例化。
- 它们是密封的,不可被继承。
- 它们不能包含实例构造函数。
using System;
using System.Runtime.InteropServices;
namespace HCommon.License
{
[StructLayout(LayoutKind.Sequential)]
public static class SoftDog
{
}
}
然后,使用DllImport引入使用到的dll方法,因为参数和返回值都很不友好,所以定义为private,不直接向外部公开。
/// <summary>
/// 获取狗驱动程序安装信息接口函数GetDogDriverInfo
/// </summary>
[DllImport("SoftDogSetup.dll", CharSet = CharSet.Ansi)]
private static extern ushort GetDogDriverInfo();
/// <summary>
/// 驱动安装的函数接口InstDriver
/// </summary>
[DllImport("SoftDogSetup.dll", CharSet = CharSet.Ansi)]
private static extern ushort InstDriver(ushort flag);
/// <summary>
/// 驱动卸载的函数接口UninstallDriver
/// </summary>
[DllImport("SoftDogSetup.dll", CharSet = CharSet.Ansi)]
private static extern ushort UninstallDriver(ushort flag);
/// <summary>
/// 读取加密狗单函数接口DogRead
/// </summary>
[DllImport("win32dll.dll", CharSet = CharSet.Ansi)]
private static extern uint DogRead(uint length, uint startIndex, byte[] data);
然后,定义加密狗驱动相关的public方法
public static bool DriverInstalled
{
get
{
ushort code = GetDogDriverInfo();
if (code == 3008) throw new HCommon.HException("{0}:没有管理员权限!", 3008);
if (code == 1 || code == 2 || code == 7 || code == 8) return true;
return false;
}
}
public static void InstallDriver()
{
ushort code = GetDogDriverInfo();
if (code == 3008) throw new HCommon.HException("{0}:没有管理员权限!", 3008);
if (code == 1 || code == 2 || code == 7 || code == 8) return;
if (code == 4 || code == 5)
UninstallDriver();
code = InstDriver(1);
if (code != 0) throw new HCommon.HException("{0}:安装驱动失败!", code);
}
public static void UninstallDriver()
{
ushort code = UninstallDriver(1);
if (code != 0) throw new HCommon.HException("{0}:卸载驱动失败!", code);
}
最后,定义读取加密狗序列号的public方法
public static string SerialNumber
{
get
{
uint code = 0;
byte[] data = new byte[100];
code = DogRead(0, 0, data);
if (code != 0)
{
throw new HCommon.HException("{0}:读取序列号失败!", code);
}
uint sn = BitConverter.ToUInt32(data, 0);
return sn.ToString();
}
}
使用SoftDog类
使用SoftDog的客户程序代码片段:
…
//软件启动时先判断是否安装加密狗驱动
if (!SoftDog.DriverInstalled)
{
SoftDog.InstallDriver();
MessageBox.Show("已安装加密狗驱动,请插入加密狗。");
}
…
//定义序列号属性
private static readonly string g_Key = "12345678";
private string SerialNumber
{
get
{
try
{
string sn = SoftDog.SerialNumber;
if (string.IsNullOrEmpty(sn)) return string.Empty;
return sn;
}
catch (Exception ex)
{
HCommon.ApplicationLog.LogException(ex);
}
return string.Empty;
}
}
//序列号判断的方法
private void CheckLicense()
{
if (SerialNumber != g_Key)
{
MessageBox.Show("对不起,计算机必须插入正确的加密狗,软件才能授权使用,请按确定退出系统。");
System.Windows.Forms.Application.Exit();
}
}
…
另外,软件运行时也应该定期地检查序列号,当发现加密狗已被拔出时终止软件的使用。需要定义一个Timer,每隔2分钟调用一次CheckLicense方法即可。
几种常用授权方式总结
- 软件序列号授权:支持单机,序列号容易泄漏。
- 软件序列号网络注册激活:授权控制最理想,但不支持单机。
- 加密狗授权:支持单机,效果比软件序列号授权好,但占用一个硬件端口。
分享到:
相关推荐
加密狗是一种硬件设备,常用于软件保护,防止未经授权的复制和使用。它通过插入计算机的USB接口,与软件进行交互,实现对软件的加密和授权管理。本篇将围绕"加密狗软件加密"这一主题,深入探讨在不同编程环境下,如...
USB加密狗是一种硬件设备,用于保护软件免受非法复制和使用,它通过USB接口与计算机连接,通过内部的加密算法实现授权验证。 首先,我们要理解C#中的USB事件处理。在.NET Framework或.NET Core中,开发者可以使用...
在实际应用中,使用和利时的OPC软件授权,用户可以实现以下功能: 1. 数据采集:通过OPC接口,软件能实时读取和利时或其他兼容OPC协议的设备数据,如模拟量、数字量、状态信息等。 2. 设备控制:用户可以通过OPC...
NT88系列加密狗函数是专门用于保护软件版权和实现软件功能控制的一种技术。加密狗通常包含硬件设备和相应的API(应用程序编程接口)函数,允许开发者在他们的软件中调用这些函数来与加密狗进行通信,实现特定的功能...
加密狗是一种硬件设备,通常用于软件保护,防止未经授权的复制或使用。它可以通过USB接口连接到计算机,存储和处理加密的数据,为软件提供安全的身份验证。 1. **C#硬件交互基础**: 在C#中进行硬件交互通常需要...
对于软件开发者、技术支持人员以及对软件授权管理有需求的人来说,这个工具是极其有价值的,可以方便地进行故障排查和管理。 其中包含的"dogcheck.exe"可能是主应用程序,负责用户界面和与加密狗的实际交互。这个可...
这种加密狗通常被软件开发商用于授权他们的应用程序,只有插入了正确的加密狗,软件才能正常运行。 **驱动程序**是计算机硬件与操作系统之间的桥梁,它使得操作系统能够识别并控制硬件设备。UKEY3000D的驱动程序...
在IT领域,尤其是在系统管理和软件开发中,控制USB设备的使用是常见的需求,尤其是在企业环境中为了数据安全。本文将深入探讨如何使用C#编程语言来禁用和启用USB接口,并结合加密狗或安全令牌验证机制,以提升系统...
5. 安全控制:权限管理功能确保只有授权人员才能操作软件,防止数据篡改,保证交易公正性。 6. 系统集成:可与其他企业管理系统(如ERP、WMS)无缝对接,实现数据共享,提高整体运营效率。 安装调试是软件应用的...
WMX3通用运动控制系统是专为软银公司开发的一款运动控制系统,它结合了C#编程语言,实现了上位机远程控制监控,用以取代传统的PLC操作模式。该系统的安装过程和运行要求涉及到了多种计算机技术知识,包括操作系统...
加密狗是一种硬件设备,常用于软件保护,防止未经授权的复制和使用。Rockey4是一款流行的加密狗产品,它提供了一种安全的手段来保护软件开发商的知识产权。此压缩包"加密狗Rockey4文档和程序代码.zip"包含了与Rockey...
开发包中的SDK则提供了与加密狗通信的API(Application Programming Interface)和必要的库文件,使得开发者可以方便地在各种编程语言(如C++, C#, Java等)中调用这些接口,实现加密狗的读写操作和其他高级功能。...
开发者可以使用C#的第三方库,如`CryptoUSB.NET`,实现与加密狗的交互,进行授权验证。 - **IC卡**:C#可以利用`SmartCardReader`类库与智能卡进行通信,进行身份验证、数据存储等操作。 - **指纹识别**:C#结合...
开发者需要掌握如何用C#控制摄像头,结合图像处理库(如AForge.NET或Emgu CV)进行图像特效应用,如添加边框、文字等。 7. **数据采集器读写**: 数据采集器通常用于测量和记录物理信号。在C#中,可能需要通过串口...
Rockey4是一款常见的加密狗,由盛瀚科技公司推出,它主要用于软件授权管理,确保只有合法用户能够运行受保护的软件。Rockey4驱动是与这款加密狗配合使用的驱动程序,使得操作系统能够识别并正确通信,从而实现对软件...
最后,在你的测试环境中运行模拟器,同时启动依赖加密狗的软件,观察软件是否能正常识别并使用模拟的加密狗。如果遇到任何问题,比如软件无法识别模拟器,或者功能受限,可能需要检查模拟器的配置,或者深入研究DSF...
【标题】"VS2005测试用机器人程序"指的是基于Visual Studio 2005...同时,它的使用还需配合加密狗,以确保软件授权的合法性。对于开发者和测试人员来说,理解并掌握这类工具的使用是提升工作效率和保证产品质量的关键。
**实例说明**:在加密狗中写入并读取密码数据,以实现软件的授权验证。 **技术要点**: - **加密狗通信**:实现与加密狗的通信接口。 - **数据加密**:确保数据的安全性。 #### 七、总结 以上就是C# WinForm界面...
加密狗是一种硬件设备,通常插入计算机USB接口,作为软件授权的一种方式,它存储了与软件许可证相关的密钥,只有当加密狗正确识别时,软件才能运行。 从提供的文件列表来看,我们可以推测项目包含以下几个关键部分...
在本文中,我们将详细探讨如何在64位Windows 7操作系统上安装PSCAD v4.5,这是一个电力系统分析和...请注意,使用非正版加密狗可能违反软件许可协议,并存在法律风险。在实际操作中,请确保遵循软件的合法使用规定。