Qt编写软件注册功能

一、软件目的

应项目需求,需要为编写的软件添加一层保护,防止滥用。

二、软件环境

Qt5.9+Windows
主要加密算法:MD5
MD5简单介绍:MD5是一种不可逆的加密算法,类似计算hash值,不同的数据字符无论长短,经过MD5计算后都会得到一组32位的16进制字符,这组字符只有极小的概率重复,因此可以作为一般加密使用。

三、实现效果

可以对机器码(MAC、CPUID)进行加密
输出加密后的注册码
可以设置级别等
再根据注册码验证字符
在这里插入图片描述

四、主要内容

获取机器码:

void systemInfo::getCPU(QString &cpu)
{
    QString cmd="wmic cpu get processorid";
    QProcess p;
    p.start(cmd);
    p.waitForFinished();
    QString result = QString::fromLocal8Bit(p.readAllStandardOutput());
    QStringList list = cmd.split(" ");
    result = result.remove(list.last(), Qt::CaseInsensitive);
    result = result.replace("\r", "");
    result = result.replace("\n", "");
    result = result.simplified();
    cpu = result;
}

void systemInfo::getMAC(QString &mac)
{
    // 获取所有网络接口列表
    QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();
    int nCnt = nets.count();
    QString strMacAddr = "";
    for (int i = 0; i < nCnt; i++)
    {
        // 如果此网络接口被激活并且正在运行并且不是回环地址,则就是我们需要找的Mac地址
        if (nets[i].flags().testFlag(QNetworkInterface::IsUp) && nets[i].flags().testFlag(QNetworkInterface::IsRunning) && !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack))
        {
            strMacAddr = nets[i].hardwareAddress();
            break;
        }
    }
    mac = strMacAddr.replace(":","");
}

void systemInfo::getTime(int &Stime)
{
    QDateTime time = QDateTime::currentDateTime();//获取当前时间
    Stime = time.toTime_t();//将当前时间转为时间戳:一串唯一的数字字符
    //qDebug()<<"系统时间戳"<<Stime;
}

加密程序

class MD5
{
public:
    MD5();
    ~MD5();
    //初始化字符串
    void md5Init(QString &md5);
    //md5加密,可选加密级别
    QString md5Encrypt(int i,QString &str);
    //MD5验证,比较机器码
    int md5Verify(QString bm);

protected:
    systemInfo *sys;
};
//md5加密
QString MD5::md5Encrypt(int i,QString &str)
{
    md5Init(str);
   // qDebug()<<"机器码:"<<str;
    QString salt1 = "kiioawal%@#kahl$*jllalk<[;wd38;Khaw;7775fsaaiUY':";
    QString salt2 = "iol*W72_76w7daio83kOkdla(ldwawdajw8;w;aawfwadiUdw";
    QString salt3 = "dawd&jY5jkajw!_76w7k[;wd3;wadwags;aidaduiikwdUdwa";
    QString jiami,miwen;
    if(i==1)
    {
        jiami = salt1 + str;
    }
    else if(i==2)
    {
        jiami = salt2 + str;
    }
    else if(i==3)
    {
        jiami = salt3 + str;
    }
    QByteArray ba,bb;
    QCryptographicHash md(QCryptographicHash::Md5);
    ba.append(jiami);
    md.addData(ba);
    bb = md.result();
    miwen.append(bb.toHex());
    return miwen;
}

注册码验证

int MD5::md5Verify(QString bm)
{
    QString str;
    QString miwen1 = md5Encrypt(1,str);
    QString miwen2 = md5Encrypt(2,str);
    QString miwen3 = md5Encrypt(3,str);
    if(QString::compare(bm, miwen1) == 0)
    {
        int time;
        sys->getTime(time);
        qDebug()<<"time:"<<time;
        return 1;
    }
    else if(QString::compare(bm, miwen2) == 0)
    {
        return 2;
    }
    else if(QString::compare(bm, miwen3) == 0)
    {
        return 3;
    }
    else
    {
        return 0;
    }
}

源代码:代码

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt实现软件注册码功能,可以参考如下步骤: 1. 定义软件注册码生成算法:可以采用一些加密算法,如MD5、SHA等,在用户购买软件后,将硬件信息、购买信息等关键数据进行加密生成唯一的注册码。 2. 在软件中添加注册码输入界面:设计一个用户输入注册码的界面,在界面中添加一个输入框用于用户输入注册码。 3. 验证注册码:在用户输入注册码后,点击验证按钮,软件需要验证注册码的有效性。可以通过在软件中内嵌一个验证函数,将用户输入的注册码与之前生成的注册码进行对比,如果一致,则认证成功,可以继续使用软件;否则,认证失败,提醒用户重新输入注册码。 4. 保存注册码信息:在软件内部定义一个保存注册码信息的存储方式,可以选择将注册码保存在配置文件中,也可以保存在数据库中。当用户输入有效的注册码后,需要将注册码信息保存在本地,下次打开软件时无需再次输入。 5. 锁定软件功能:在软件中内部添加一个判断函数,在用户没有输入有效的注册码或者未通过验证时,锁定某些功能模块,使用户无法正常使用。当用户成功通过验证后,解锁相应功能模块。 6. 提供注册码管理界面:为了方便用户使用和管理注册码,可以设计一个注册码管理界面,用户可以在其中查看已经输入的注册码,进行重新输入、更新注册码等操作。 通过以上步骤,在Qt实现软件注册码功能,可以保护软件的合法使用,防止盗版和非授权用户的使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值