• 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

      

  • 相关阅读:
    访问 http://localhost:8081对 flink 集群和任务进行监控管理
    Flink之流处理WordCount
    Flink之批处理WordCount
    为什么说JAVA中runnable接口的run方法运行在子线程?
    Java中的字符输入输出流练习
    在JAVA中实现文件读写练习
    JAVA自定义异常使用方法
    三种二叉树遍历的非递归算法
    C编译错误:Main.c:4:5: error: variably modified ‘f’ at file scope int f[maxn];
    中序+先序构造二叉树,后序遍历
  • 原文地址:https://www.cnblogs.com/whp0224/p/8421291.html
Copyright © 2020-2023  润新知