Qt秘钥生成器怎么实现
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,本篇内容介绍了"Qt秘钥生成器怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言在很多商
千家信息网最后更新 2024年11月23日Qt秘钥生成器怎么实现
本篇内容介绍了"Qt秘钥生成器怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一、前言
在很多商业软件中,需要提供一些可以试运行的版本,这样就需要配套密钥机制来控制,纵观大部分的试用版软件,基本上采用以下几种机制来控制。
远程联网激活,每次启动都联网查看使用时间等,这种方法最完美,缺点是没法联网的设备就歇菜了。
通过获取本地的硬盘+CPU等硬件的编号,做一个运算,生成一个激活码,超过半数的软件会采用此方法,缺点是不能自由控制软件的其他参数,比如软件中添加的设备数量的控制。
设定一个运行到期时间+数量限制+已运行时间的密钥文件,发给用户配套软件使用,缺点是如果仅仅设置的是运行到期时间,用户可以更改电脑时间来获取更长的使用时间,在电脑不联网的情况下。 本demo采用抛砖引玉的形式,用第三种方法来实现,密钥文件采用最简单的异或加密,可以自行改成其他加密方法。
二、代码思路
QString frmMain::getWMIC(const QString &cmd){ //获取cpu名称:wmic cpu get Name //获取cpu核心数:wmic cpu get NumberOfCores //获取cpu线程数:wmic cpu get NumberOfLogicalProcessors //查询cpu序列号:wmic cpu get processorid //查询主板序列号:wmic baseboard get serialnumber //查询BIOS序列号:wmic bios get serialnumber //查看硬盘:wmic diskdrive get serialnumber 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(); return result;}QString frmMain::getCpuName(){ return getWMIC("wmic cpu get name");}QString frmMain::getCpuId(){ return getWMIC("wmic cpu get processorid");}QString frmMain::getDiskNum(){ return getWMIC("wmic diskdrive where index=0 get serialnumber");}QString frmMain::getXorEncryptDecrypt(const QString &data, char key){ //采用异或加密,也可以自行更改算法 QByteArray buffer = data.toLatin1(); int size = buffer.size(); for (int i = 0; i < size; i++) { buffer[i] = buffer.at(i) ^ key; } return QLatin1String(buffer);}void frmMain::on_btnOk_clicked(){ bool useDate = ui->ckDate->isChecked(); bool useRun = ui->ckRun->isChecked(); bool useCount = ui->ckCount->isChecked(); if (!useDate && !useRun && !useCount) { if (QMessageBox::question(this, "询问", "确定要生成没有任何限制的密钥吗?") != QMessageBox::Yes) { return; } } QString strDate = ui->dateEdit->date().toString("yyyy-MM-dd"); QString strRun = ui->cboxMin->currentText(); QString strCount = ui->cboxCount->currentText(); QString key = QString("%1|%2|%3|%4|%5|%6").arg(useDate).arg(strDate).arg(useRun).arg(strRun).arg(useCount).arg(strCount); QFile file(QApplication::applicationDirPath() + "/key.db"); file.open(QFile::WriteOnly | QIODevice::Text); file.write(getXorEncryptDecrypt(key, 110).toLatin1()); file.close(); QMessageBox::information(this, "提示", "生成密钥成功,将 key.db 文件拷贝到对应目录即可!");}
三、效果图
"Qt秘钥生成器怎么实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
时间
软件
生成
密钥
控制
序列
序列号
文件
方法
缺点
加密
查询
运行
生成器
内容
情况
数量
更多
机制
激活
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全 强军
一对一、一对多的数据库
中专网络技术专业好吗
绝地逃生怎么选服务器
清镇软件开发者
数据库分区初始化的分区能删吗
在服务器里面怎么制作刷铁轨机
泰安网络技术中心
物流管理系统软件开发需求
济南软件开发排行
浙江软件开发销售
数据库原理与技术课件目录
无线网络安全类型不正确
网络安全有什么好的书
在哪里下载sql数据库
怎样配置mysql数据库
广东期货软件开发
开源手游服务器框架
南阳软件开发怎么样
武汉软件开发驻场流程
河南新地网络技术有限公司
蚂蚁字节互联网科技有限公司
北京国家网络安全产业园海淀园
胡建山人社部网络安全
成都春秋网络技术有限责任公司
us800系列打印服务器怎么用
泰安网络技术中心
gtd全球恐怖主义研究数据库
网络安全专项检查自查表
数据库代码重构