zoukankan      html  css  js  c++  java
  • 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 = 8;
                //定制算法可根据个人修改
                username =
                    System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(
                    Math.Abs(~System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(username, "md5").GetHashCode() ^ 0x2010 << 3)
                    .ToString(), "sha1");            
    
                StringBuilder result = new StringBuilder();
    
                for (int i = 0; i < username.Length; i++)
                {
                    result.Append(username.Substring(i, 1));
                    if ((i + 1) % breakCount == 0)
                    {
                        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 = @"LicensesDFF31A6A-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

      

  • 相关阅读:
    .net 中ifram的session过期,跳转到登录页面
    新建物料组!
    WCF学习系列(1)
    WCF学习系列(4)————数据协定
    AX中操作Excel
    WCF学习系列(3)————承载
    简单的库存模型组
    博弈_ZOJ3591_序列中子序列异或值大于0.cpp
    zoj2527_求最长等差数列
    第二次周日赛
  • 原文地址:https://www.cnblogs.com/whp0224/p/8421291.html
Copyright © 2011-2022 走看看