从txt里进行获取后比对当前cpu和硬盘信息,不匹配直接退出
#include "widget.h"
#include <QProcess>
#include <QDebug>
#include <QCryptographicHash>
#include <QFile>
#include <QMessageBox>
#include <QCoreApplication>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
getMD5();
compareMD5();
}
Widget::~Widget()
{
}
//=============================获取cpuid=============================
QString Widget::getcpuid()
{
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();
qDebug() << result;
return result;
}
//=============================获取硬盘序列号=============================
QString Widget::getDiskdrive()
{
QProcess p(0);
p.start("wmic diskdrive get serialnumber");
p.waitForStarted();
p.waitForFinished();
QString result = QString::fromLocal8Bit(p.readAllStandardOutput());
QStringList list = result.split("\r\n");
if (list.size() < 1)
return "error";
qDebug() << list.at(1).trimmed();
return list.at(1).trimmed();
}
void Widget::getMD5()
{
QString passWd = getDiskdrive() + getcpuid();//可以自由组合
QByteArray str;
str = QCryptographicHash::hash(passWd.toLatin1(),QCryptographicHash::Md5);
str = QCryptographicHash::hash(str,QCryptographicHash::Sha256);
MD5.append(str.toHex());
qDebug()<<MD5;
}
void Widget::compareMD5()
{
//=============================获取文本信息=============================
QString filePath = QCoreApplication::applicationDirPath() + "/1.txt";
QFile file(filePath);
if (!file.exists())
QMessageBox::information(NULL, u8"提示", u8"密钥文件不存在");
if (!file.open(QIODevice::ReadOnly|QIODevice::Text))//打开指定文件
QMessageBox::about(NULL, u8"文件", u8"获取密钥失败!");
QTextStream key(&file);
QString line = key.readLine();
file.close();
//=============================校验=============================
if(line != MD5)
{
QMessageBox::information(NULL, u8"提示", u8"无权限!");
exit(0);
}
}