#include "mainwindow.h"
|
#include "ui_mainwindow.h"
|
#include "qaesencryption.h"
|
#include "licensedata.h"
|
#include "shortcrypto.h"
|
|
#include <QClipboard>
|
#include <QDateTime>
|
#include <QDebug>
|
#include <QDesktopServices>
|
#include <QFileDialog>
|
#include <QMessageBox>
|
#include <QProcess>
|
#include <qbytearray.h>
|
#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);
|
QTextOption opt = ui->textEdit_localid->document()->defaultTextOption();
|
opt.setWrapMode(QTextOption::WrapAnywhere);
|
ui->textEdit_localid->document()->setDefaultTextOption(opt);
|
QTextOption opt_lic = ui->textEdit_licensekey->document()->defaultTextOption();
|
opt_lic.setWrapMode(QTextOption::WrapAnywhere);
|
ui->textEdit_licensekey->document()->setDefaultTextOption(opt_lic);
|
//前七条是简化加密数据必用的,在这里设定好方便对应
|
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");
|
changeUIstate();
|
}
|
|
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();
|
// 一键解密
|
lic2.fromBinary(ShortCrypto::decrypt(encryptlocalid, key));
|
qDebug()<<"on_pushButton_decrypt_clicked"<<lic2.toDebugString();
|
//与之前的加密对应,且去掉冗余信息
|
localinfo.Baseboard_Uuid = LicenseData::uuidBinaryToString(lic2.boardUuid);
|
localinfo.CPU_Processorid = LicenseData::binaryToHexString(lic2.cpuSerial);
|
localinfo.Username = lic2.userName;
|
localinfo.LicensedDuration_end = lic2.expireDate.toString("yyyy-MM-dd");
|
// localinfo.LicensedDuration_start = localid_Obj.value(m_numToInfo.key("LicensedDuration_start")).toString();
|
localinfo.Productid = QString::number(lic2.productId);
|
localinfo.Versionid = QString::number(lic2.verMajor)+"."+QString::number(lic2.verMinor);
|
localinfo.ActiveState = static_cast<int>(lic2.activeState);
|
licenseinfo = LicenseInfo(localinfo);
|
ui->textEdit_licensekey->setPlainText(ui->textEdit_localid->toPlainText());
|
changeUIstate();
|
|
// 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)
|
{
|
//现在点击授权是从当前的时间加授权时间
|
QDateTime licensedate = QDateTime::currentDateTime();
|
QDateTime newlicensedate = licensedate.addMonths(time);
|
QString licensedatestr = newlicensedate.toString("yyyy-MM-dd");
|
lic2.expireDate = QDate::fromString(licensedatestr,"yyyy-MM-dd");
|
// lic2.expireDate = lic2.expireDate.addMonths(time);
|
lic2.activeState = 1;
|
QString cipher = ShortCrypto::encrypt(lic2.toBinary(), key);
|
ui->textEdit_licensekey->clear();
|
ui->textEdit_licensekey->setPlainText(cipher);
|
// 一键解密
|
LicenseData lic3;
|
lic3.fromBinary(ShortCrypto::decrypt(cipher, key));
|
qDebug()<<"change"<<cipher<<lic3.toDebugString()<<cipher.size();
|
//更新licenseinfo,只需要更新LicensedDuration_end、LicensedDuration_start、ActiveState
|
licenseinfo.LicensedDuration_end = newlicensedate.toString("yyyy-MM-dd");
|
licenseinfo.LicensedDuration_start = licensedate.toString("yyyy-MM-dd");
|
licenseinfo.ActiveState = 1;
|
changeUIstate();
|
//将授权信息记录到excel表中
|
QString edition ="";
|
if(time == 3){
|
edition = QStringLiteral("普通版");
|
}else if(time == 6){
|
edition = QStringLiteral("教育版");
|
}else if(time == 12){
|
edition = QStringLiteral("专业版");
|
}
|
ActiveRecord(lic2,edition,ui->textEdit_licensekey->toPlainText());
|
}
|
|
void MainWindow::ActiveRecord(LicenseData lic,QString edition, QString licenseKey)
|
{
|
QString Baseboard_Uuid = LicenseData::uuidBinaryToString(lic.boardUuid);
|
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, LicenseData::uuidBinaryToString(lic.boardUuid));
|
xlsx.write(rowCount, 3, edition);
|
xlsx.write(rowCount, 4, QDate::currentDate().toString("yyyy-MM-dd"));
|
xlsx.write(rowCount, 5, lic.expireDate.toString("yyyy-MM-dd"));
|
xlsx.write(rowCount, 6, QString::number(lic2.productId));
|
xlsx.write(rowCount, 7, QString::number(lic2.verMajor)+"."+QString::number(lic2.verMinor));
|
xlsx.write(rowCount, 8, licenseKey);
|
}else{
|
//如果存在这条记录就更新数据信息
|
xlsx.write(uuidColumn, 2, LicenseData::uuidBinaryToString(lic.boardUuid));
|
xlsx.write(uuidColumn, 3, edition);
|
xlsx.write(uuidColumn, 4, QDate::currentDate().toString("yyyy-MM-dd"));
|
xlsx.write(uuidColumn, 5, lic.expireDate.toString("yyyy-MM-dd"));
|
xlsx.write(uuidColumn, 6, QString::number(lic2.productId));
|
xlsx.write(uuidColumn, 7, QString::number(lic2.verMajor)+"."+QString::number(lic2.verMinor));
|
xlsx.write(uuidColumn, 8, licenseKey);
|
}
|
xlsx.save();
|
}
|
|
QString MainWindow::getEncrypt_New()
|
{
|
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");
|
|
//尝试新的加密方法
|
LicenseData lic;
|
lic.boardUuid = LicenseData::hexStringToBinary(localinfo.Baseboard_Uuid);
|
lic.cpuSerial = LicenseData::hexStringToBinary(localinfo.CPU_Processorid);
|
lic.userName = localinfo.Username;
|
lic.expireDate = QDate::fromString(localinfo.LicensedDuration_end,"yyyy-MM-dd");
|
lic.productId = localinfo.Productid.toUInt();
|
QString version = localinfo.Versionid;
|
lic.verMajor = version.split(".").at(0).toUInt();
|
lic.verMinor = version.split(".").at(1).toUInt();
|
lic.activeState = localinfo.ActiveState;
|
// 一键加密
|
QString cipher = ShortCrypto::encrypt(lic.toBinary(), key);
|
// ui->textEdit_localid->setText(cipher);
|
return cipher;
|
}
|
|
|
void MainWindow::on_pushButton_getId_clicked()
|
{
|
QString localid = getLocalID();
|
QString encryptid = getEncrypt(localid,key);
|
|
//新的加密方法
|
encryptid = getEncrypt_New();
|
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<<textEdit.document()->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));
|
|
lic2.productId = ui->lineEdit_setproid->text().toUInt();
|
QString cipher = ShortCrypto::encrypt(lic2.toBinary(), key);
|
ui->textEdit_licensekey->setPlainText(cipher);
|
// setLicenseinfo(licensekey_Obj);
|
|
//這裡也只需要更新productId
|
licenseinfo.Productid = ui->lineEdit_setproid->text();
|
changeUIstate();
|
|
}
|
|
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));
|
|
// setLicenseinfo(licensekey_Obj);
|
QString version = ui->lineEdit_setversion->text();
|
lic2.verMajor = version.split(".").at(0).toUInt();
|
lic2.verMinor = version.split(".").at(1).toUInt();
|
QString cipher = ShortCrypto::encrypt(lic2.toBinary(), key);
|
ui->textEdit_licensekey->setPlainText(cipher);
|
//這裡也只需要更新Versionid
|
licenseinfo.Versionid = ui->lineEdit_setversion->text();
|
changeUIstate();
|
}
|
|
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()+QStringLiteral("/安全评价软件授权人数统计表.xlsx");
|
|
QUrl fileUrl = QUrl::fromLocalFile(excelPath);
|
|
// 2. 调用系统服务打开文件管理器并选中文件
|
QDesktopServices::openUrl(fileUrl);
|
}
|