License控制解决方案
当我们写完一个软件以后一般都会牵扯到软件控制,那么控制版本的原理是什么呢?其实就是在程序中添加了一段经过自己编写算法(这个算法可以是简单的公式运算,也可以是复杂的结合硬件的绑定方式),将形成的序列号注册到我们的注册表中.每当程序运行的时候都去读取注册表信息并验证一把.
下面是一个简单的License生成器代码:
public partial class LicenseCreator : Form
{
public LicenseCreator()
{
InitializeComponent();
} private void btnLincenseCreator_Click(object sender, EventArgs e)
{
string licenseKey = GetLicenseKey(txtUsername.Text);
txtLincense.Text = licenseKey;
}
//通过自定义算法返回序列号
private string GetLicenseKey(string username)
{
int breakCount = ;
//定制算法可根据个人修改
username =
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(
Math.Abs(~System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(username, "md5").GetHashCode() ^ 0x2010 << )
.ToString(), "sha1"); StringBuilder result = new StringBuilder(); for (int i = ; i < username.Length; i++)
{
result.Append(username.Substring(i, ));
if ((i + ) % breakCount == )
{
result.Append("-");
}
} return result.ToString().TrimEnd('-');
}
//注册信息
private void btnRegedit_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtUsername.Text) || string.IsNullOrEmpty(txtLincense.Text))
{
MessageBox.Show("请生成Lincese后重新注册");
return;
}
string regeditKey = @"Licenses\DFF31A6A-A5C2-48A7-B4D9-3C1151676FC8\";
RegistryKey classesRootKey = Registry.ClassesRoot;
RegistryKey licenseKey = classesRootKey.CreateSubKey(regeditKey); licenseKey.SetValue("UserName", txtUsername.Text);
licenseKey.SetValue("Key", txtLincense.Text); MessageBox.Show("注册成功!"); } private void btnClear_Click(object sender, EventArgs e)
{
txtUsername.Text = string.Empty;
txtLincense.Text = string.Empty;
txtUsername.Focus();
}
LicenseCreator
License控制解决方案的更多相关文章
- 采用truelicense进行Java规划license控制 扩展可以验证后,license 开始结束日期,验证绑定一个给定的mac住址
采用truelicense进行Java规划license控制 扩展可以验证后,license 开始结束日期,验证绑定一个给定的mac住址. Truelicense 它是一个开源java license ...
- Vue-Access-Control:前端用户权限控制解决方案
原文地址:http://refined-x.com/2017/11/28/Vue2.0用户权限控制解决方案/ Vue-Access-Control是一套基于Vue/Vue-Router/axios 实 ...
- License控制实现原理(20140808)
近期须要做一个License控制的实现,做了一个设计,设计图例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVjX2Zlbmc=/font/5 ...
- Android Studio 错误 Duplicate files copied in APK META-INF/LICENSE.txt解决方案
My logcat: log Execution failed for task ':Prog:packageDebug'. Duplicate files copied in APK META-IN ...
- WebAPI 权限控制解决方案——Phenix.NET企业应用软件快速开发平台.使用指南.21.WebAPI服务(三)
21.1 数据服务 21.1.1基本操作功能 Phenixヾ的数据服务,提供了如下的基本操作: 功能 Type URI 参数 完整获取实体集合对象 GET api/Data 分页获取实体集合对象 ...
- webapi 权限控制解决方案
随着移动互联网的发展,webapi的应用越来越广泛,本文是笔者总结的webapi的认证校验案例,欢迎指出 案例分为两个功能: 1.用户登录,传入账号和密码到api服务器,然后服务器使用FormsAut ...
- 【miscellaneous】监狱智能视频监控系统设计解决方案
监狱智能视频监控系统设计解决方案 一.系统概况 随着司法监狱管理系统内视频监控系统的日益发展,现有的被动式人工监控这一传统模式已无法满足新形势下的监管工作需求,尤其是现在靠轮询的视频监控方式,无法对突 ...
- 华为云计算IE面试笔记-华为云计算解决方案业务迁移支持哪些迁移?有哪些特点?请描述基本的业务交付流程、业务迁移流程和原则。
1. 迁移场景:华为云计算解决方案按照源端环境来说,支持P2V.V2V(P2V:物理设备(操作系统及其上的应用软件和数据)迁移到华为虚拟化平台.V2V:其他厂商的虚拟化平台迁移到华为虚拟化平台.)以及 ...
- 转载 SharePoint开发部署WSP解决方案包
转载原出处: http://642197992.blog.51cto.com/319331/1582731 注:本文所讲内容以SharePoint2013版本为例,开发工具以VS2013为基础.历史版 ...
随机推荐
- python学习笔记:装饰器2
python的装饰器本质是函数,为了不改变装饰目标函数内部代码而增加额外功能而存在 一.一般装饰函数实例: import datetime def func_name(func):#定义一个装饰函数, ...
- Android中的task和stack
今天在重新理了一遍intent的过程中发现task是一个神奇的东西,而它又和stack有着很深的联系.task顾名思义是一个任务,但是这个任务可不一定只是来自一个app,比如我用微信来发一张图片,那么 ...
- springmvc多个视图解析器
<property name="viewResolvers"> <list><!-- 多个视图解析器 --> <bean class=&q ...
- 代码覆盖率-JaCoCo
代码覆盖率 在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%. JaCoCo Jacoco从多种角度对代码 ...
- lib下的Jar包在项目打包的时候提示不能找不到
maven 使用本地包 lib jar包 依赖一个lib目录 解决方法: <plugin> <groupId>org.apache.maven.plugins</grou ...
- week7 ls
week7 ls 实现ls: 实现ls -l:
- ONOS架构-系统组件
系统组件 系统分层 App/core/providers 业务和子系统 一个业务service是有多个组件构成的功能单元,基于各层软件栈提供一个垂直的分片slice,将构成业务service的组件集合 ...
- erlang 笔记(06/03/02)
1 .同时打开的端口数量限制(Open ports) erlang:system_info(port_limit)查询 可以通过环境变量ERL_MAX_PORTS修改,或者配置erlang启动参数(标 ...
- ES6 新加的类型Symbol()
Symbol()如果一个对象中的键已经存在,但目前我们目前不知道这个键是存在的,然后我们去给这个键赋值,Symbol()就不会改变这个键对应的值
- NOIp 2018 D2T1 旅行//未完成
这个题没有认真读的话就会写下以下的DD代码 #include<bits/stdc++.h> #define N 5010 using namespace std; int n,m; int ...