用加密狗控制软件的授权(C#)
加密狗授权方式介绍
每只加密狗都有一个固定的序列号,并且一般是无法修改的。软件运行时读取加密狗的序列号进行判断,序列号通过验证后才能正常使用软件。
选购一套加密狗开发套件
我选购了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方法即可。
几种常用授权方式总结
- 软件序列号授权:支持单机,序列号容易泄漏。
- 软件序列号网络注册激活:授权控制最理想,但不支持单机。
- 加密狗授权:支持单机,效果比软件序列号授权好,但占用一个硬件端口。
用加密狗控制软件的授权(C#)相关推荐
- 什么是灵活的软件授权模式,如何选择软件加密狗?
作为软件和智能设备行业里的人,您很有可能听说过"灵活的软件加密打包"或"灵活的软件授权模式".但这些究竟指的是什么?灵活的软件模式可以归结为扩展客户的选择.它让 ...
- 超级狗是集软件授权、课件保护和身份认证于一身的加密狗。
超级狗是加密狗家族中最新一代软件保护和授权产品.它提供了强大的软件.课件防盗版功能以及灵活的软件授权功能,保护软件开发商的知识产权与核心技术,确保开发商的市场收入. 超级狗将软件保护与授权技术化繁为简 ...
- 集软件授权、课件保护和身份认证于一身的加密狗
超级狗是加密狗家族中最新一代软件保护和授权产品.它提供了强大的软件.课件防盗版功能以及灵活的软件授权功能,保护软件开发商的知识产权与核心技术,确保开发商的市场收入. 超级狗将软件保护与授权技术化繁为简 ...
- 圣天诺(LDK)加密锁 云授权,不用使用硬件的加密锁(加密狗)
圣天诺(LDK)加密锁 云授权,不用使用硬件的加密锁(加密狗) 圣天诺LDK是市场上成熟且备受软件商信赖的软件许可授权方案,在它的基础上,我们做了进一步的开发,使其能够满足云授权场景的需要,并继承以往 ...
- 加密狗,由USB硬件加密狗–软加密狗(软锁)–云授权的转变
加密狗,由USB硬件加密狗–软加密狗(软锁)–云授权的转变 加密狗软授权常见问题 圣天诺LDK软授权 问:什么是软授权? 答:软授权(也称软锁)是以计算机文件作为载体的软件许可证(License) 类 ...
- 金百福系统一直显示连接服务器,三维力控组态软件V7.2/7.1/7.0 新版加密狗无限点全授权...
软件名称:三维力控组态软件V7.2/7.1/7.0 新版加密狗无限点全授权 三维力控组态软件,USB加密狗,送教学! [V7.2 最新版]: 无限点,全功能, 支持WEB发布,含所有扩展组件 温馨提醒 ...
- EasyDSS如何实现定期检测和取读加密狗授权?
TSINGSEE青犀视频有加密机.加密狗.授权码三种授权方式,其中加密机是插在虚拟机上,加密狗是插在物理机上,加密狗在物理机可以方便插拔更换服务器. EasyDSS的加密狗授权,主要读取到授权时间.允 ...
- 新一代经济型加密狗——超级狗
快速实现高安全度的软件保护,轻松定义多种软件授权模式. 超级狗是加密狗家族中最新一代软件保护和授权产品.它提供了强大的软件防盗版功能以及灵活的软件授权功能,保护软件开发商的知识产权与核心技术,确保开发 ...
- 一种混合加密方案在软件授权中的应用
拥有知识产权的软件一般采取软件保护手段,需要使用某种方式激活软件才可以使用.软件激活本质是对密文数据进行比较,而密文数据是由软件开发商根据目标机器的特征数据进行加密产生的.激活过程是在认证服务器或者目 ...
最新文章
- 【云计算】云上建站快速入门:博客、论坛、CMS、电子商务网站统统
- Scrum工具Leangoo产品白皮书
- ADS1.2安装教程
- 土地一分用计算机怎么算,一分地等于多少平方米怎么算
- python快捷_汇总学习Python必备的42个快捷键,看完收获满满
- Visual Studio Code / 开启自检文本编码方式的方法
- python画熊猫论文_Python数据可视化之美:专业图表绘制指南(全彩)
- u-boot,linux,文件系统移植笔记1
- Js中Currying的应用
- SpringMVC3 AnnotationMethodHandlerAdapter与mvc:annotation-driven冲突的解决方案
- 浅议.NET、ASP.NET和C#的关系
- php中的require(),PHP中include()与require()的区别说明
- 计算机科学现代教育,现代教育技术教程-计算机科学教育.pdf
- IntelliJ IDEA+jetty部署Eova
- 在 visual studio 中添加 ILDASM 工具
- matlab流体力学分析,matlab流体力学
- java毕业设计花漾网在线商城mybatis+源码+调试部署+系统+数据库+lw
- postman测试Excel文件导入导出功能
- python生兔子问题(递归算法)_python 实现兔子生兔子示例
- std::accumulate的具体用法