背景
我们经常使用各种开发软件,比如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