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