#include "mainwindow.h" #include "ui_mainwindow.h" #include "qaesencryption.h" #include #include #include #include #include #include #include #include #include "QtXlsx/xlsxdocument.h" #include "QtXlsx/xlsxworksheet.h" #include "QtXlsx/xlsxformat.h" using namespace QXlsx; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); setFixedSize(680, 600); initUI(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::initUI() { //将旧版本的按钮隐藏 ui->pushButton_accreditall->setVisible(false); ui->pushButton_accreditcell->setVisible(false); ui->pushButton_accreditaquifer->setVisible(false); ui->pushButton_deaccreditall->setVisible(false); ui->pushButton_accreditpipe->setVisible(false); ui->pushButton_accreditnetwork->setVisible(false); ui->pushButton_dateset->setVisible(false); ui->pushButton_adddate->setVisible(false); ui->pushButton_reducedate->setVisible(false); ui->lineEdit_basenum->setVisible(false); ui->lineEdit_biosnum->setVisible(false); ui->lineEdit_basenum_2->setVisible(false); ui->lineEdit_biosnum_2->setVisible(false); ui->label_basenum->setVisible(false); ui->label_biosnum->setVisible(false); ui->label_basenum_2->setVisible(false); ui->label_biosnum_2->setVisible(false); //前七条是简化加密数据必用的,在这里设定好方便对应 m_numToInfo.insert("1","Baseboard_Uuid"); m_numToInfo.insert("2","CPU_Processorid"); m_numToInfo.insert("3","Username"); m_numToInfo.insert("4","LicensedDuration_start"); m_numToInfo.insert("5","LicensedDuration_end"); m_numToInfo.insert("6","Productid"); m_numToInfo.insert("7","Versionid"); m_numToInfo.insert("8","ActiveState"); //后边的是排除后不参与加密的数据信息 m_numToInfo.insert("9","Bios_Serialnumber"); m_numToInfo.insert("10","IsEnabled_cell"); m_numToInfo.insert("11","IsEnabled_aquifer"); m_numToInfo.insert("12","IsEnabled_pipe"); m_numToInfo.insert("13","IsEnabled_network"); m_numToInfo.insert("14","Baseboard_Serialnumber"); } QString MainWindow::toUpperAndLower(QString src) { for(int i = 0; i < src.count(); i++) { QChar curC = src.at(i); if(curC.isUpper()) { curC = curC.toLower(); } else if(curC.isLower()){ curC = curC.toUpper(); } src[i] = curC; } return src; } QString MainWindow::EncodebyBase64(const QString &src)//中文字符转byte64 { QByteArray text = src.toLocal8Bit(); QByteArray by = text.toBase64(); QString str = QString(by); str = toUpperAndLower(str); return str; } QString MainWindow::DecodebyBase64(const QString &src) { QString str = toUpperAndLower(src); // 大小写解密 QByteArray text = str.toLocal8Bit(); QByteArray by = text.fromBase64(text); return QString::fromLocal8Bit(by); } QString MainWindow::EncryptData(const QString &src, QCryptographicHash::Algorithm algo) { //1.创建加密对象 QCryptographicHash hash(algo); //2.放入要加入的数据 hash.addData(src.toUtf8()); //3.获取加密的结果 QByteArray arr = hash.result(); QString result = arr.toHex(); return result; } QString MainWindow::AES_encryption(const QString &data, const QString &key)// AES加密 { //AES_128要求key长度16,AES_192要求key长度24,AES_256要求key长度32 QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, QAESEncryption::PKCS7); QByteArray enBA = encryption.encode(data.toUtf8(), key.toUtf8()); return QString::fromLatin1(enBA.toBase64()); } QString MainWindow::AES_decryption(const QString &data, const QString &key)// AES解密 { QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, QAESEncryption::PKCS7); QByteArray enBA = QByteArray::fromBase64(data.toUtf8()); QByteArray deBA = encryption.decode(enBA, key.toUtf8()); return QString::fromLatin1(QAESEncryption::RemovePadding(deBA, QAESEncryption::PKCS7)); } QByteArray MainWindow::AES_decryption_byte(const QString &data, const QString &key) { QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, QAESEncryption::PKCS7); QByteArray enBA = QByteArray::fromBase64(data.toUtf8()); QByteArray deBA = encryption.decode(enBA, key.toUtf8()); return deBA; } QString MainWindow::getEncrypt(const QString &data, QString key) { QString str_encode_text; QString b64code = EncodebyBase64(data); QString hashkey64 = EncryptData(key,QCryptographicHash::Sha256); QString hashkey32 = EncryptData(hashkey64,QCryptographicHash::Md5); QString AEScode = AES_encryption(b64code,hashkey32); str_encode_text = EncodebyBase64(AEScode); return str_encode_text; } QString MainWindow::getDecrypt(const QString &data, QString key) { QString decodedText; QString b64result = DecodebyBase64(data); QString hashkey64 = EncryptData(key,QCryptographicHash::Sha256); QString hashkey32 = EncryptData(hashkey64,QCryptographicHash::Md5); QString AESresult = AES_decryption(b64result,hashkey32); decodedText = DecodebyBase64(AESresult); //添加解压缩的操作 QByteArray text = decodedText.toLocal8Bit(); QByteArray jsonData = qUncompress(text.fromBase64(text)); // decodedText = DecodebyBase64(QString::fromLocal8Bit(jsonData)); decodedText = QString(jsonData); return decodedText; } void MainWindow::changeUIstate() { if(localinfo.Username==""){ ui->pushButton_accreditall->setEnabled(false); ui->pushButton_accreditcell->setEnabled(false); ui->pushButton_accreditaquifer->setEnabled(false); ui->pushButton_accreditpipe->setEnabled(false); ui->pushButton_accreditnetwork->setEnabled(false); ui->pushButton_deaccreditall->setEnabled(false); ui->pushButton_dateset->setEnabled(false); ui->pushButton_adddate->setEnabled(false); ui->pushButton_reducedate->setEnabled(false); ui->pushButton_setversion->setEnabled(false); ui->pushButton_setproid->setEnabled(false); ui->lineEdit_setversion->setEnabled(false); ui->lineEdit_setproid->setEnabled(false); ui->pushButton_normal->setEnabled(false); ui->pushButton_education->setEnabled(false); ui->pushButton_profession->setEnabled(false); ui->lineEdit_basenum->setText(""); ui->lineEdit_baseuuid->setText(""); ui->lineEdit_biosnum->setText(""); ui->lineEdit_cpunum->setText(""); ui->lineEdit_username->setText(""); ui->lineEdit_date->setText(""); ui->label_iscell->setText(""); ui->label_isaquifer->setText(""); ui->label_ispipe->setText(""); ui->label_isnetwork->setText(""); ui->lineEdit_version->setText(""); ui->lineEdit_setversion->setText(""); ui->lineEdit_proid->setText(""); ui->lineEdit_setproid->setText(""); }else{ ui->pushButton_accreditall->setEnabled(true); ui->pushButton_accreditcell->setEnabled(true); ui->pushButton_accreditaquifer->setEnabled(true); ui->pushButton_accreditpipe->setEnabled(true); ui->pushButton_accreditnetwork->setEnabled(true); ui->pushButton_deaccreditall->setEnabled(true); ui->pushButton_dateset->setEnabled(true); ui->pushButton_adddate->setEnabled(true); ui->pushButton_reducedate->setEnabled(true); ui->pushButton_setversion->setEnabled(true); ui->pushButton_setproid->setEnabled(true); ui->lineEdit_setversion->setEnabled(true); ui->lineEdit_setproid->setEnabled(true); ui->pushButton_normal->setEnabled(true); ui->pushButton_education->setEnabled(true); ui->pushButton_profession->setEnabled(true); ui->lineEdit_basenum->setText(localinfo.Baseboard_Serialnumber); ui->lineEdit_baseuuid->setText(localinfo.Baseboard_Uuid); ui->lineEdit_biosnum->setText(localinfo.Bios_Serialnumber); ui->lineEdit_cpunum->setText(localinfo.CPU_Processorid); ui->lineEdit_username->setText(localinfo.Username); ui->lineEdit_date->setText(localinfo.LicensedDuration_end); ui->lineEdit_version->setText(localinfo.Versionid); ui->lineEdit_proid->setText(localinfo.Productid); // ui->label_iscell->setText(localinfo.IsEnabled_cell==0?QStringLiteral("未激活"):QStringLiteral("已激活")); // ui->label_isaquifer->setText(localinfo.IsEnabled_aquifer==0?QStringLiteral("未激活"):QStringLiteral("已激活")); // ui->label_ispipe->setText(localinfo.IsEnabled_pipe==0?QStringLiteral("未激活"):QStringLiteral("已激活")); // ui->label_isnetwork->setText(localinfo.IsEnabled_network==0?QStringLiteral("未激活"):QStringLiteral("已激活")); //当前授权是统一的,只需要判断一个是否激活的参数就行 ui->label_iscell->setText(localinfo.ActiveState==0?QStringLiteral("未激活"):QStringLiteral("已激活")); ui->label_isaquifer->setText(localinfo.ActiveState==0?QStringLiteral("未激活"):QStringLiteral("已激活")); ui->label_ispipe->setText(localinfo.ActiveState==0?QStringLiteral("未激活"):QStringLiteral("已激活")); ui->label_isnetwork->setText(localinfo.ActiveState==0?QStringLiteral("未激活"):QStringLiteral("已激活")); } if(licenseinfo.Username==""){ ui->lineEdit_basenum_2->setText(""); ui->lineEdit_baseuuid_2->setText(""); ui->lineEdit_biosnum_2->setText(""); ui->lineEdit_cpunum_2->setText(""); ui->lineEdit_username_2->setText(""); ui->lineEdit_date_2->setText(""); ui->label_iscell_2->setText(""); ui->label_isaquifer_2->setText(""); ui->label_ispipe_2->setText(""); ui->label_isnetwork_2->setText(""); ui->lineEdit_version_2->setText(""); ui->lineEdit_proid_2->setText(""); }else{ ui->lineEdit_basenum_2->setText(licenseinfo.Baseboard_Serialnumber); ui->lineEdit_baseuuid_2->setText(licenseinfo.Baseboard_Uuid); ui->lineEdit_biosnum_2->setText(licenseinfo.Bios_Serialnumber); ui->lineEdit_cpunum_2->setText(licenseinfo.CPU_Processorid); ui->lineEdit_username_2->setText(licenseinfo.Username); ui->lineEdit_date_2->setText(licenseinfo.LicensedDuration_end); ui->lineEdit_version_2->setText(licenseinfo.Versionid); ui->lineEdit_setversion->setText(licenseinfo.Versionid); ui->lineEdit_proid_2->setText(licenseinfo.Productid); ui->lineEdit_setproid->setText(licenseinfo.Productid); // ui->label_iscell_2->setText(licenseinfo.IsEnabled_cell==0?QStringLiteral("未激活"):QStringLiteral("已激活")); // ui->label_isaquifer_2->setText(licenseinfo.IsEnabled_aquifer==0?QStringLiteral("未激活"):QStringLiteral("已激活")); // ui->label_ispipe_2->setText(licenseinfo.IsEnabled_pipe==0?QStringLiteral("未激活"):QStringLiteral("已激活")); // ui->label_isnetwork_2->setText(licenseinfo.IsEnabled_network==0?QStringLiteral("未激活"):QStringLiteral("已激活")); ui->label_iscell_2->setText(licenseinfo.ActiveState==0?QStringLiteral("未激活"):QStringLiteral("已激活")); ui->label_isaquifer_2->setText(licenseinfo.ActiveState==0?QStringLiteral("未激活"):QStringLiteral("已激活")); ui->label_ispipe_2->setText(licenseinfo.ActiveState==0?QStringLiteral("未激活"):QStringLiteral("已激活")); ui->label_isnetwork_2->setText(licenseinfo.ActiveState==0?QStringLiteral("未激活"):QStringLiteral("已激活")); } } void MainWindow::on_pushButton_decrypt_clicked() { QString encryptlocalid = ui->textEdit_localid->toPlainText(); QString localid = getDecrypt(encryptlocalid,key); QByteArray localidbyte = localid.toLocal8Bit(); QJsonParseError err_rpt; QJsonDocument localidjsondoc(QJsonDocument::fromJson(localid.toUtf8(), &err_rpt));//字符串格式化为JSON if(err_rpt.error != QJsonParseError::NoError) { localinfo = LicenseInfo(); licenseinfo = LicenseInfo(); workingjsondoc = QJsonDocument(); ui->textEdit_licensekey->setPlainText(""); changeUIstate(); qDebug() << QStringLiteral("localid JSON格式错误"); QMessageBox msgbox(QMessageBox::Information,QStringLiteral(""),QStringLiteral("解析失败,不是一个正确的设备ID序列"),QMessageBox::Ok); msgbox.setButtonText(QMessageBox::Ok,QStringLiteral("确定")); msgbox.exec(); } else //JSON格式正确 { QMessageBox msgbox(QMessageBox::Information,QStringLiteral(""),QStringLiteral("解析成功"),QMessageBox::Ok); msgbox.setButtonText(QMessageBox::Ok,QStringLiteral("确定")); msgbox.exec(); ui->textEdit_licensekey->setPlainText(ui->textEdit_localid->toPlainText()); workingjsondoc = QJsonDocument(QJsonDocument::fromJson(localidbyte)); QJsonObject localid_Obj = localidjsondoc.object(); // localinfo.Baseboard_Serialnumber = localid_Obj.value("Baseboard_Serialnumber").toString(); // localinfo.Baseboard_Uuid = localid_Obj.value("Baseboard_Uuid").toString(); // localinfo.Bios_Serialnumber = localid_Obj.value("Bios_Serialnumber").toString(); // localinfo.CPU_Processorid = localid_Obj.value("CPU_Processorid").toString(); // localinfo.Username = localid_Obj.value("Username").toString(); // localinfo.IsEnabled_cell = localid_Obj.value("IsEnabled_cell").toInt(); // localinfo.IsEnabled_aquifer = localid_Obj.value("IsEnabled_aquifer").toInt(); // localinfo.IsEnabled_pipe = localid_Obj.value("IsEnabled_pipe").toInt(); // localinfo.IsEnabled_network = localid_Obj.value("IsEnabled_network").toInt(); // localinfo.LicensedDuration_end = localid_Obj.value("LicensedDuration_end").toString(); // localinfo.LicensedDuration_start = localid_Obj.value("LicensedDuration_start").toString(); // localinfo.Productid = localid_Obj.value("Productid").toString(); // localinfo.Versionid = localid_Obj.value("Versionid").toString(); //与之前的加密对应,且去掉冗余信息 localinfo.Baseboard_Uuid = localid_Obj.value(m_numToInfo.key("Baseboard_Uuid")).toString(); localinfo.CPU_Processorid = localid_Obj.value(m_numToInfo.key("CPU_Processorid")).toString(); localinfo.Username = localid_Obj.value(m_numToInfo.key("Username")).toString(); localinfo.LicensedDuration_end = localid_Obj.value(m_numToInfo.key("LicensedDuration_end")).toString(); localinfo.LicensedDuration_start = localid_Obj.value(m_numToInfo.key("LicensedDuration_start")).toString(); localinfo.Productid = localid_Obj.value(m_numToInfo.key("Productid")).toString(); localinfo.Versionid = localid_Obj.value(m_numToInfo.key("Versionid")).toString(); localinfo.ActiveState = localid_Obj.value(m_numToInfo.key("ActiveState")).toInt(); licenseinfo = LicenseInfo(localinfo); changeUIstate(); } } void MainWindow::on_pushButton_accreditall_clicked() { QJsonObject licensekey_Obj = workingjsondoc.object(); licensekey_Obj["IsEnabled_cell"] = 1; licensekey_Obj["IsEnabled_aquifer"] = 1; licensekey_Obj["IsEnabled_pipe"] = 1; licensekey_Obj["IsEnabled_network"] = 1; workingjsondoc.setObject(licensekey_Obj); QByteArray jsonbytearray = workingjsondoc.toJson(); ui->textEdit_licensekey->setPlainText(""); ui->textEdit_licensekey->setPlainText(getEncrypt(QString(jsonbytearray),key)); setLicenseinfo(licensekey_Obj); } void MainWindow::on_pushButton_accreditcell_clicked() { QJsonObject licensekey_Obj = workingjsondoc.object(); licensekey_Obj["IsEnabled_cell"] = 1; workingjsondoc.setObject(licensekey_Obj); QByteArray jsonbytearray = workingjsondoc.toJson(); ui->textEdit_licensekey->setPlainText(""); ui->textEdit_licensekey->setPlainText(getEncrypt(QString(jsonbytearray),key)); setLicenseinfo(licensekey_Obj); } void MainWindow::on_pushButton_accreditaquifer_clicked() { QJsonObject licensekey_Obj = workingjsondoc.object(); licensekey_Obj["IsEnabled_aquifer"] = 1; workingjsondoc.setObject(licensekey_Obj); QByteArray jsonbytearray = workingjsondoc.toJson(); ui->textEdit_licensekey->setPlainText(getEncrypt(QString(jsonbytearray),key)); setLicenseinfo(licensekey_Obj); } void MainWindow::on_pushButton_accreditpipe_clicked() { QJsonObject licensekey_Obj = workingjsondoc.object(); // licensekey_Obj["IsEnabled_pipe"] = 1; licensekey_Obj["8"] = 1; workingjsondoc.setObject(licensekey_Obj); QByteArray jsonbytearray = workingjsondoc.toJson(); ui->textEdit_licensekey->setPlainText(""); ui->textEdit_licensekey->setPlainText(getEncrypt(QString(jsonbytearray),key)); setLicenseinfo(licensekey_Obj); } void MainWindow::on_pushButton_accreditnetwork_clicked() { QJsonObject licensekey_Obj = workingjsondoc.object(); licensekey_Obj["IsEnabled_network"] = 1; workingjsondoc.setObject(licensekey_Obj); QByteArray jsonbytearray = workingjsondoc.toJson(); ui->textEdit_licensekey->setPlainText(""); ui->textEdit_licensekey->setPlainText(getEncrypt(QString(jsonbytearray),key)); setLicenseinfo(licensekey_Obj); } void MainWindow::on_pushButton_deaccreditall_clicked() { QJsonObject licensekey_Obj = workingjsondoc.object(); licensekey_Obj["IsEnabled_cell"] = 0; licensekey_Obj["IsEnabled_aquifer"] = 0; licensekey_Obj["IsEnabled_pipe"] = 0; licensekey_Obj["IsEnabled_network"] = 0; workingjsondoc.setObject(licensekey_Obj); QByteArray jsonbytearray = workingjsondoc.toJson(); ui->textEdit_licensekey->setPlainText(""); ui->textEdit_licensekey->setPlainText(getEncrypt(QString(jsonbytearray),key)); setLicenseinfo(licensekey_Obj); } void MainWindow::on_pushButton_copykey_clicked() { QClipboard* clip = QApplication::clipboard(); clip->setText(ui->textEdit_licensekey->toPlainText()); QMessageBox msgbox(QMessageBox::Information,tr(""),QStringLiteral("复制成功"),QMessageBox::Ok); msgbox.setButtonText(QMessageBox::Ok,QStringLiteral("确定")); msgbox.exec(); } void MainWindow::on_pushButton_clicked() { if(ui->dockWidget->isHidden()){ ui->dockWidget->show(); setFixedSize(680, 600); }else{ ui->dockWidget->hide(); setFixedSize(340, 600); } } void MainWindow::setLicenseinfo(const QJsonObject licensekey_Obj) { licenseinfo.Baseboard_Serialnumber = licensekey_Obj.value(m_numToInfo.key("Baseboard_Serialnumber")).toString(); licenseinfo.Baseboard_Uuid = licensekey_Obj.value(m_numToInfo.key("Baseboard_Uuid")).toString(); licenseinfo.Bios_Serialnumber = licensekey_Obj.value(m_numToInfo.key("Bios_Serialnumber")).toString(); licenseinfo.CPU_Processorid = licensekey_Obj.value(m_numToInfo.key("CPU_Processorid")).toString(); licenseinfo.Username = licensekey_Obj.value(m_numToInfo.key("Username")).toString(); licenseinfo.IsEnabled_cell = licensekey_Obj.value(m_numToInfo.key("IsEnabled_cell")).toInt(); licenseinfo.IsEnabled_aquifer = licensekey_Obj.value(m_numToInfo.key("IsEnabled_aquifer")).toInt(); licenseinfo.IsEnabled_pipe = licensekey_Obj.value(m_numToInfo.key("IsEnabled_pipe")).toInt(); licenseinfo.IsEnabled_network = licensekey_Obj.value(m_numToInfo.key("IsEnabled_network")).toInt(); licenseinfo.LicensedDuration_end = licensekey_Obj.value(m_numToInfo.key("LicensedDuration_end")).toString(); licenseinfo.LicensedDuration_start = licensekey_Obj.value(m_numToInfo.key("LicensedDuration_start")).toString(); licenseinfo.Productid = licensekey_Obj.value(m_numToInfo.key("Productid")).toString(); licenseinfo.Versionid = licensekey_Obj.value(m_numToInfo.key("Versionid")).toString(); licenseinfo.ActiveState = licensekey_Obj.value(m_numToInfo.key("ActiveState")).toInt(); changeUIstate(); } QString MainWindow::getLocalID() { QString localid = ""; LicenseInfo localinfo; //查询系统用户名 localinfo.Username = qgetenv("USER"); // Linux系统 if (localinfo.Username.isEmpty()) localinfo.Username = qgetenv("USERNAME"); // Windows系统 //查询CPU序列号 localinfo.CPU_Processorid = getWindowsInfo("wmic cpu get processorid"); //查询主板序列号 localinfo.Baseboard_Serialnumber = getWindowsInfo("wmic baseboard get serialnumber"); //查询BIOS序列号 localinfo.Bios_Serialnumber = getWindowsInfo("wmic bios get serialnumber"); //查询主板唯一标识 localinfo.Baseboard_Uuid = getWindowsInfo("wmic csproduct get uuid"); QJsonDocument json_doc;//创建json文件 QJsonObject json_obj;//创建json对象 // json_obj.insert("Username",localinfo.Username); // json_obj.insert("CPU_Processorid",localinfo.CPU_Processorid); // json_obj.insert("Bios_Serialnumber",localinfo.Bios_Serialnumber); // json_obj.insert("Baseboard_Serialnumber",localinfo.Baseboard_Serialnumber); // json_obj.insert("Baseboard_Uuid",localinfo.Baseboard_Uuid); // json_obj.insert("IsEnabled_cell",localinfo.IsEnabled_cell); // json_obj.insert("IsEnabled_aquifer",localinfo.IsEnabled_aquifer); // json_obj.insert("IsEnabled_pipe",localinfo.IsEnabled_pipe); // json_obj.insert("IsEnabled_network",localinfo.IsEnabled_network); // json_obj.insert("LicensedDuration_start",localinfo.LicensedDuration_start); // json_obj.insert("LicensedDuration_end",localinfo.LicensedDuration_end); // json_obj.insert("Productid",localinfo.Productid); // json_obj.insert("Versionid",localinfo.Versionid); // json_doc.setObject(json_obj);//将json对象转为json文件 // QByteArray jsonbytearray = json_doc.toJson(); // localid = QString(jsonbytearray); //其实主要加密的数据是value(电脑的具体参数信息),前边的描述是可以简写的,按照设定好的规则,只存储简单的key值 //这里只获取我们优化后要选择加密的数据 json_obj.insert(m_numToInfo.key("Username"),localinfo.Username); json_obj.insert(m_numToInfo.key("CPU_Processorid"),localinfo.CPU_Processorid); json_obj.insert(m_numToInfo.key("Baseboard_Uuid"),localinfo.Baseboard_Uuid); json_obj.insert(m_numToInfo.key("LicensedDuration_start"),localinfo.LicensedDuration_start); json_obj.insert(m_numToInfo.key("LicensedDuration_end"),localinfo.LicensedDuration_end); json_obj.insert(m_numToInfo.key("Productid"),localinfo.Productid); json_obj.insert(m_numToInfo.key("Versionid"),localinfo.Versionid); json_obj.insert(m_numToInfo.key("ActiveState"),localinfo.ActiveState); QByteArray compressedArray = QJsonDocument(json_obj).toJson(QJsonDocument::Compact); QByteArray jsonbytearray = qCompress(compressedArray,9); localid = jsonbytearray.toBase64(); return localid; } QString MainWindow::getWindowsInfo(const QString &cmd) { QProcess p; //启动外部程序 p.start(cmd); //一体式启动,不分离,主程序退出则启动程序退出,使用close关闭 //p.startDetached(cmd) //分离式启动,主程序退出后,外部程序继续运行。 p.waitForFinished(-1); //超时等待,设置为-1,直到执行完成。 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(); p.close(); return result; } void MainWindow::giveLicense(int time) { QJsonObject licensekey_Obj = workingjsondoc.object(); // licensekey_Obj[m_numToInfo.key("IsEnabled_cell")] = 1; // licensekey_Obj[m_numToInfo.key("IsEnabled_aquifer")] = 1; // licensekey_Obj[m_numToInfo.key("IsEnabled_pipe")] = 1; // licensekey_Obj[m_numToInfo.key("IsEnabled_network")] = 1; licensekey_Obj[m_numToInfo.key("ActiveState")] = 1; // QDateTime licensedate = QDateTime::fromString(licensekey_Obj[m_numToInfo.key("LicensedDuration_end")].toString(),"yyyy-MM-dd hh:mm:ss"); // if(licensedate.isNull()){ // qDebug()<<"licenseTime is Null"; // licensedate = QDateTime::currentDateTime(); // } //现在点击授权是从当前的时间加授权时间 QDateTime licensedate = QDateTime::currentDateTime(); QDateTime newlicensedate = licensedate.addMonths(time); QString licensedatestr = newlicensedate.toString("yyyy-MM-dd hh:mm:ss"); licensekey_Obj[m_numToInfo.key("LicensedDuration_end")] = licensedatestr; workingjsondoc.setObject(licensekey_Obj); //数据压缩,去空格换行等多余无用信息 QByteArray compressedArray = QJsonDocument(licensekey_Obj).toJson(QJsonDocument::Compact); QByteArray jsonbytearray = qCompress(compressedArray,9); QString testid = jsonbytearray.toBase64(); ui->textEdit_licensekey->setPlainText(""); ui->textEdit_licensekey->setPlainText(getEncrypt(QString(testid),key)); setLicenseinfo(licensekey_Obj); //将授权信息记录到excel表中 QString edition =""; if(time == 3){ edition = QStringLiteral("普通版"); }else if(time == 6){ edition = QStringLiteral("教育版"); }else if(time == 12){ edition = QStringLiteral("专业版"); } ActiveRecord(licensekey_Obj,edition,ui->textEdit_licensekey->toPlainText()); } void MainWindow::ActiveRecord(QJsonObject jsonObj,QString edition, QString licenseKey) { QString Baseboard_Uuid = jsonObj[m_numToInfo.key("Baseboard_Uuid")].toString(); QString src = QApplication::applicationDirPath(); QDir dir(src); QString file_name(QStringLiteral("安全评价软件授权人数统计表.xlsx")); QString filepath=dir.path()+"/"+file_name; if(!dir.exists(file_name)){ Document xlsx; // 设置列标题 QStringList headers = { "id", QStringLiteral("主板唯一标识"), QStringLiteral("版本"), QStringLiteral("许可起始时间"), QStringLiteral("许可截止时间"), QStringLiteral("产品号"), QStringLiteral("版本号"), QStringLiteral("许可密钥") }; // 写入标题行 for (int col = 1; col <= headers.size(); ++col) { xlsx.write(1, col, headers[col - 1]); } xlsx.saveAs(filepath); } QXlsx::Document xlsx(filepath); int uuidColumn = -1; //先查找是否已经存在该项记录 for(int i = 2; i <= xlsx.dimension().rowCount(); i++){ QXlsx::Cell* headerCell = xlsx.cellAt(i, 2); if (headerCell) { QString headerValue = headerCell->value().toString(); if (headerValue.compare(Baseboard_Uuid, Qt::CaseInsensitive) == 0) { uuidColumn = i; break; } } } if(uuidColumn == -1){ //如果没有这条记录就写入新的 int rowCount = xlsx.dimension().rowCount()+1; int id = xlsx.read(rowCount-1,1).toInt(); xlsx.write(rowCount, 1, id+1); xlsx.write(rowCount, 2, jsonObj[m_numToInfo.key("Baseboard_Uuid")].toString()); xlsx.write(rowCount, 3, edition); xlsx.write(rowCount, 4, jsonObj[m_numToInfo.key("LicensedDuration_start")].toString()); xlsx.write(rowCount, 5, jsonObj[m_numToInfo.key("LicensedDuration_end")].toString()); xlsx.write(rowCount, 6, jsonObj[m_numToInfo.key("Productid")].toString()); xlsx.write(rowCount, 7, jsonObj[m_numToInfo.key("Versionid")].toString()); xlsx.write(rowCount, 8, licenseKey); }else{ //如果存在这条记录就更新数据信息 xlsx.write(uuidColumn, 2, jsonObj[m_numToInfo.key("Baseboard_Uuid")].toString()); xlsx.write(uuidColumn, 3, edition); xlsx.write(uuidColumn, 4, jsonObj[m_numToInfo.key("LicensedDuration_start")].toString()); xlsx.write(uuidColumn, 5, jsonObj[m_numToInfo.key("LicensedDuration_end")].toString()); xlsx.write(uuidColumn, 6, jsonObj[m_numToInfo.key("Productid")].toString()); xlsx.write(uuidColumn, 7, jsonObj[m_numToInfo.key("Versionid")].toString()); xlsx.write(uuidColumn, 8, licenseKey); } xlsx.save(); } void MainWindow::on_pushButton_getId_clicked() { QString localid = getLocalID(); QString encryptid = getEncrypt(localid,key); ui->textEdit_localid->setText(encryptid); localinfo = LicenseInfo(); licenseinfo = LicenseInfo(); workingjsondoc = QJsonDocument(); ui->textEdit_licensekey->setPlainText(""); changeUIstate(); } void MainWindow::on_pushButton_import_clicked() { QString filename = QFileDialog::getOpenFileName(this,QStringLiteral("导入密钥"),"","TXT(*.txt)"); if ( filename.isEmpty() ) return; QFile file(filename); if(!file.exists()){ QMessageBox msgBox(QMessageBox::Information, QStringLiteral("警告"), QStringLiteral("文件不存在!")); msgBox.setButtonText(QMessageBox::Yes,QStringLiteral("确定")); msgBox.exec(); return; } if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){ QMessageBox msgBox(QMessageBox::Information, QStringLiteral("警告"), QStringLiteral("无法打开文件!")); msgBox.setButtonText(QMessageBox::Yes,QStringLiteral("确定")); msgBox.exec(); return; } ui->textEdit_localid->setPlainText(""); QTextStream stream(&file); while (!stream.atEnd()) { QString str = stream.readLine(); ui->textEdit_localid->setPlainText(ui->textEdit_localid->toPlainText()+str); } file.close(); } void MainWindow::on_pushButton_export_clicked() { QString filepath = QFileDialog::getSaveFileName(this, QStringLiteral("导出文本"), "/license", tr("TXT(*.txt)")); if(filepath.split(".").last()=="txt") { QTextEdit textEdit; textEdit.append(ui->textEdit_licensekey->toPlainText()); QFile file(filepath); if(file.open(QFile::WriteOnly | QIODevice::Text)) { QTextStream ts(&file); //ts.setCodec("UTF-8"); ts<toPlainText(); file.close(); QMessageBox msgbox(QMessageBox::Information,QStringLiteral("提示"),QStringLiteral("导出成功")); msgbox.setButtonText(QMessageBox::Yes,QStringLiteral("确定")); msgbox.exec(); } } } void MainWindow::on_pushButton_dateset_clicked() { QJsonObject licensekey_Obj = workingjsondoc.object(); QDateTime currentdate = QDateTime::currentDateTime(); QString currentdatestr = currentdate.toString("yyyy-MM-dd hh:mm:ss"); licensekey_Obj["LicensedDuration_end"] = currentdatestr; workingjsondoc.setObject(licensekey_Obj); QByteArray jsonbytearray = workingjsondoc.toJson(); ui->textEdit_licensekey->setPlainText(""); ui->textEdit_licensekey->setPlainText(getEncrypt(QString(jsonbytearray),key)); setLicenseinfo(licensekey_Obj); } void MainWindow::on_pushButton_adddate_clicked() { QJsonObject licensekey_Obj = workingjsondoc.object(); QDateTime licensedate = QDateTime::fromString(licensekey_Obj["LicensedDuration_end"].toString(),"yyyy-MM-dd hh:mm:ss"); if(licensedate.isNull()){ qDebug()<<"licenseTime is Null"; licensedate = QDateTime::currentDateTime(); } QDateTime newlicensedate = licensedate.addMonths(1); QString licensedatestr = newlicensedate.toString("yyyy-MM-dd hh:mm:ss"); licensekey_Obj["LicensedDuration_end"] = licensedatestr; workingjsondoc.setObject(licensekey_Obj); QByteArray jsonbytearray = workingjsondoc.toJson(); ui->textEdit_licensekey->setPlainText(""); ui->textEdit_licensekey->setPlainText(getEncrypt(QString(jsonbytearray),key)); setLicenseinfo(licensekey_Obj); } void MainWindow::on_pushButton_reducedate_clicked() { QJsonObject licensekey_Obj = workingjsondoc.object(); QDateTime licensedate = QDateTime::fromString(licensekey_Obj["LicensedDuration_end"].toString(),"yyyy-MM-dd hh:mm:ss"); if(licensedate.isNull()){ qDebug()<<"licenseTime is Null"; licensedate = QDateTime::currentDateTime(); } QDateTime newlicensedate = licensedate.addMonths(-1); QString licensedatestr = newlicensedate.toString("yyyy-MM-dd hh:mm:ss"); licensekey_Obj["LicensedDuration_end"] = licensedatestr; workingjsondoc.setObject(licensekey_Obj); QByteArray jsonbytearray = workingjsondoc.toJson(); ui->textEdit_licensekey->setPlainText(""); ui->textEdit_licensekey->setPlainText(getEncrypt(QString(jsonbytearray),key)); setLicenseinfo(licensekey_Obj); } void MainWindow::on_pushButton_setproid_clicked() { QJsonObject licensekey_Obj = workingjsondoc.object(); licensekey_Obj[m_numToInfo.key("Productid")] = ui->lineEdit_setproid->text(); workingjsondoc.setObject(licensekey_Obj); QByteArray compressedArray = QJsonDocument(licensekey_Obj).toJson(QJsonDocument::Compact); QByteArray jsonbytearray = qCompress(compressedArray,9); QString testid = jsonbytearray.toBase64(); ui->textEdit_licensekey->setPlainText(""); ui->textEdit_licensekey->setPlainText(getEncrypt(QString(testid),key)); // QByteArray jsonbytearray = workingjsondoc.toJson(); // ui->textEdit_licensekey->setPlainText(""); // ui->textEdit_licensekey->setPlainText(getEncrypt(QString(jsonbytearray),key)); setLicenseinfo(licensekey_Obj); } void MainWindow::on_pushButton_setversion_clicked() { QJsonObject licensekey_Obj = workingjsondoc.object(); licensekey_Obj[m_numToInfo.key("Versionid")] = ui->lineEdit_setversion->text(); workingjsondoc.setObject(licensekey_Obj); QByteArray compressedArray = QJsonDocument(licensekey_Obj).toJson(QJsonDocument::Compact); QByteArray jsonbytearray = qCompress(compressedArray,9); QString testid = jsonbytearray.toBase64(); ui->textEdit_licensekey->setPlainText(""); ui->textEdit_licensekey->setPlainText(getEncrypt(QString(testid),key)); // QByteArray jsonbytearray = workingjsondoc.toJson(); // ui->textEdit_licensekey->setPlainText(""); // ui->textEdit_licensekey->setPlainText(getEncrypt(QString(jsonbytearray),key)); setLicenseinfo(licensekey_Obj); } void MainWindow::on_pushButton_normal_clicked() { giveLicense(3); } void MainWindow::on_pushButton_education_clicked() { giveLicense(6); } void MainWindow::on_pushButton_profession_clicked() { giveLicense(12); } void MainWindow::on_pushButton_viewUsers_clicked() { QString excelPath = QApplication::applicationDirPath(); // QString filename = QFileDialog::getOpenFileName(nullptr,tr("打开文件"),excelPath,tr("excel文件(*.xlsx)")); // if(filename=="") // { // return; // } QUrl fileUrl = QUrl::fromLocalFile(excelPath); // 2. 调用系统服务打开文件管理器并选中文件 QDesktopServices::openUrl(fileUrl); }