【qt】获取CPU和硬盘进行MD5加密

该C++代码片段展示了如何通过WindowsManagementInstrumentationCommand(WMIC)获取CPUID和硬盘序列号,然后将它们组合生成MD5哈希进行安全验证。程序会检查1.txt文件中的MD5是否匹配,如果不匹配则显示无权限信息并退出。
摘要由CSDN通过智能技术生成

从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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值