之前做的一个项目,想要给软件做一个注册码功能。当软件发布之后,不想给所有人用,这时就可以通过注册机给软件生成授权码来软件加密。整个过程实现分为两大步骤,一是在自己的软件打开时,增加一段判断逻辑;二是写一个软件注册机,对于给定的机器码生成授权码,并且设置授权到期时间。这里也说明一下,本文实现软件注册码的功能主要是基于注册表。 大体实现思路是获取到机器的CPU信息、MAC信息生成独一无二的机器码,之后使用密钥对其做md5加密,最后为该机器设置一个过期时间,并对其进行编码,拼接在加密后的字符后,作为授权码。

1. 在自己的项目中增加判断逻辑

以下是一些工具函数

// 获取MAC地址信息

QString get_mac_id()

{

QList nets = QNetworkInterface::allInterfaces();

int nCnt = nets.count();

QString strMacAddr = "";

for(int i = 0; i < nCnt; i++)

{

if(nets[i].flags().testFlag(QNetworkInterface::IsUp) &&

nets[i].flags().testFlag(QNetworkInterface::IsRunning) &&

!nets[i].flags().testFlag(QNetworkInterface::IsLoopBack))

{

for(int j = 0; j < nets[i].addressEntries().size(); j++)

{

if(nets[i].addressEntries().at(j).ip() != QHostAddress::LocalHost &&

nets[i].addressEntries().at(j).ip().protocol() == QAbstractSocket::IPv4Protocol)

{

strMacAddr = nets[i].hardwareAddress();

}

}

}

}

strMacAddr.remove(':');

return strMacAddr;

}

// 获取CPU信息

QString get_cpu_id(){

QString strCpuId = "";

unsigned int dwBuf[4] = {

0 };

unsigned long long ret = 0;

__cpuid((int*)(void*)dwBuf, 1);

ret = dwBuf[3];

ret = ret