首页 > 其他分享 >软件授权的认识

软件授权的认识

时间:2023-07-19 11:44:25浏览次数:31  
标签:私钥 license License 认识 mac 软件 授权

背景

我们经常使用各种开发软件,比如IntelliJ IDEA、Navicat、Visual Studio等,这些软件都有一个特点,就是要收费。一般是我们需要去购买一个许可,然后输入这个许可到软件里就能够使用软件。
公钥密码的三个主要用途:

加密/解密
数字签名
密钥交换
需要实现授权。简单的授权方式有:

license文件
USB加密狗
网络授权
这些三方软件本身售价不高,采用license文件是成本最低的方式。激活码只有短短几十个字符,我们也可以认为那是license文件的方式。把这些字符放到指定的文件内不就是license文件!license授权的原理也很简单,给入一些数据,只有厂商知道哪些数据是符合的,哪些是不符合的。

需求

软件可以创建并验证license
License基于硬件特征进行绑定
软件和License都要防止用户随意拷贝
License可以是永久性的或者临时性的
License要进行加密和解密
License的验证由某种可靠的数字签名机制来实现
License模块需要用特殊机制对其进行保护,以防被反编译轻易破解

License 主要内容

LicenseType=许可证类型,目前分为 [空,试用,其他] 三类。
CompanyName=公司名称,即使用客户的信息,可以是除换行外的任意字符串。
AppName=软件名称,是除换行外的任意字符串。
AppVersion=软件版本,根据标准方式命名。

MachineCode=机器特征码,使用机器的mac地址作为唯一码。 
MC_CPU=处理器名称
MC_mac=mac地址

InstallDate=安装日期,yyyyMMddHHmmss 的格式。
ExpireDate=过期日期,yyyyMMdd的格式。
TryDays=试用日期,默认为30。
IsAuthenticated=是否已经授权,1表示授权,其他值表示未授权。

原理

数字签名:一种防伪造技术,能够通过公钥验证的数据一定是私钥拥有者所签发的。因此除非私钥泄露(一般放在服务器),否则没有人能够伪造。

许可生成就是服务器使用非对称加密私钥对许可进行数字签名,客户端使用对应的公钥对许可进行数字签名校验,校验通过再校验许可的内容。

根据客户服务器硬件信息(MAC地址、IP地址、CPU序列号、主板序列号)生成授权证书,同时可以给授权证书设置生效时间与失效时间。

license授权机制的原理:
(1)生成密钥对,包含私钥和公钥。
(2)授权者保留私钥,使用私钥对授权信息诸如使用截止日期,mac 地址等内容生成 license 签名证书。
(3)公钥给使用者,放在代码中使用,用于验证 license 签名证书是否符合使用条件。

主要技术问题

Mac地址获取

public static string GetMacAddress()
 {
     try
     {
         ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
         ManagementObjectCollection moc = mc.GetInstances();
         string strMac = string.Empty;
         foreach (ManagementObject mo in moc)
         {
             if ((bool)mo["IPEnabled"] == true)
             {
                 strMac = mo["MacAddress"].ToString();
             }
         }
         return strMac;
     }
     catch
     {
         return "unknown";
     }
 }
def get_mac_address():
    import uuid
    node = uuid.getnode()
    mac = uuid.UUID(int = node).hex[-12:]
    return mac

本文参考了一些其他的博客,希望没有错误。

标签:私钥,license,License,认识,mac,软件,授权
From: https://www.cnblogs.com/jianjiana/p/17565143.html

相关文章

  • 软件设计七项原则
    一、软件设计七项原则总结归纳设计原则归纳总结开闭原则对扩展开放,对修改关闭里氏替换原则不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义依赖倒置原则高层不应该依赖低层,要面向接口编程单一职责原则一个类只干一件事,实现类要单一......
  • 软件测试-基础阶段学习
    阶段目标  能独立针对web项目实施功能测试 一、测试介绍什么是软件测试使用技术手段验证软件是否满足需求测试主流技能功能测试自动化测试接口测试性能测试主流方向建议:功能测试+接口测试自动化测试+接口功能+性能二、测试常用分类2.1阶段划分单元测试......
  • 软件工程
    先来点官方的介绍软件工程是研究和指导软件开发和维护的工程类学科,它以计算机科学理论及其他相关学科的理论为指导,采用工程化的概念、原理、规范、技术和方法进行软件工程项目的开发和维护,把经过实践证明正确的管理措施和当前能够得到最好的技术方法结合起来,以较少的代价获取高......
  • Eplan是什么软件?学习Eplan软件的几个关键要点
    EPLAN是一款电气计算机辅助设计软件。我是一名Eplan软件的学习者,最近在学习这个专业的电气设计软件时,总结了一些关键要点,希望能与大家分享。  1.熟悉软件界面和功能:首先,我们需要熟悉Eplan软件的界面和各种功能。了解软件的布局、菜单和工具栏,掌握基本的操作方法。可以通过......
  • CST电磁仿真软件要怎么学?
    CST电磁仿真软件是一种在电磁领域广泛应用的专业仿真工具,它可协助工程师模拟和分析多种电磁现象。然而,要学习CST电磁仿真软件需有一定的基础知识和实践经验。本文将介绍几种学习CST电磁仿真软件的方法和步骤,以帮助新手快速学会。  1.学习基础知识:在学习CST之前,需要掌握一些......
  • php实现站群软件权限管理功能示例
    1.管理员页面RBAC.php<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>权限管理</title><scriptsrc="bootstrap/js/jquery-1.11.2.min.js"></script></head><body>......
  • 设计模式-组合模式在Java中的使用示例-杀毒软件针对文件和文件夹进行杀毒
    场景组合模式组合模式(CompositePattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。在组合模式中引......
  • 常用工具软件
    1、爬虫工具charlescharles是非常好用的网络抓包工具,常见的微信、知识星球、qq等软件,无论是电脑端还是移动端的软件,只要设置代理服务器为charles,charles就可以抓取这些软件的发包和抓包情况(http/httpsrequest及response),非常方便编写爬虫程序的软件工程师使用。Charles......
  • 3基于架构的软件开发方法
    ABSD是以架构为驱动,由业务、质量(非功能)和功能需求组合驱动架构设计ABSD有三个基础,1软件功能分解,2选择架构风格实现业务和质量需求,3软件模板视角和视图,用不同的视角就会有不同视图用例来捕获功能需求,场景来捕获质量需求 架构开发过程:架构需求:需求从需求库获取、构件标识(生......
  • 多路径软件及其安装与配置
    什么是存储多路径?存储多路径是指存储设备通过多条链路与主机一个或多个网卡连接,通过存储设备的控制器控制数据流的路径,实现数据流的负荷分担,保证存储设备与主机连接的可靠性。主机上每个SCSI设备都具有一个SCSI地址,该地址由initiatorID(或称为hostID)、targetID以及LUN组成;......