MD5工具开发

MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于 确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald LinnRivest)设计,于1992年公开,用以取代MD4算法。
MD5应用编辑
一致性验证
数字签名
安全访问认证
创建一个Qt Widget Application
MD5工具开发(QT编程)
选择添加一个C++ Class
MD5工具开发(QT编程)
UI页面布局:
MD5工具开发(QT编程)
md5check.h

#include <QObject>
#include<QThread>
#include <QFileInfo>
#include <QFileDialog>
#include<qDebug>
#include<QFile>
#include <QCryptographicHash>
#include<QTime>
class Md5Check : public QObject
{
    Q_OBJECT
public:
    explicit Md5Check(QObject *parent = nullptr);

signals:
 void sendMd5CheckSignal(const QByteArray &);//反馈到md5值得界面
 void sendProgressBarSignal(int,int);//反馈到进度条页面,以生成进度条
                                    //已处理的数据量,待处理的数据量

public slots:
 void getMd5CheckSumSlot(const QString &filePath);
};

#endif // MD5CHECK_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include"md5check.h"
#include <QClipboard>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
signals:
    void checkMd5SumSignal(const QString &filePath);
private slots:
    void on_toolButtonOpenFile_clicked();
    void recvMd5CheckSumSlot(const QByteArray &);
    void recvProgressBarSlot(int,int);
    void on_pushButtonClose_clicked();
    void on_pushButtonCopySum_clicked();
private:
    Ui::Widget *ui;
    Md5Check mMd5CheckSum;
     QThread md5Thread;
};

#endif // WIDGET_H

widget.cpp

#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    mMd5CheckSum.moveToThread(&md5Thread);//从object移动到一个thread
    md5Thread.start();
    qDebug()<<"Widget::Widget"<<QThread::currentThreadId();
    connect(&mMd5CheckSum,SIGNAL(sendMd5CheckSignal(QByteArray)),this,SLOT(recvMd5CheckSumSlot(QByteArray)));
    connect(this,SIGNAL(checkMd5SumSignal(QString)),&mMd5CheckSum,SLOT(getMd5CheckSumSlot(QString)));
    connect(&mMd5CheckSum,SIGNAL(sendProgressBarSignal(int,int)),this,SLOT(recvProgressBarSlot(int,int)));

}
Widget::~Widget()
{
    md5Thread.exit();//线程退出
    qDebug()<<QTime::currentTime();
    md5Thread.wait(10*1000);//10秒超时(阻塞时间最大为10秒)
    qDebug()<<QTime::currentTime();//确定wait()时间
    delete ui;
}

void Widget::on_toolButtonOpenFile_clicked()
{
    QFileInfo md5FileInfo;
    QString md5FileName=QFileDialog::getOpenFileName(this,
                                QString::fromLocal8Bit("打开需要的MD5SUM文件"));//弹出一个文件对话框
    qDebug()<<"md5FleNmae path:"<<md5FileName;//输出选择文件的地址
     md5FileInfo=QFileInfo(md5FileName);//得到文键
     ui->textBrowser->clear();
     if(md5FileInfo.exists())
     {
         ui->lineEdit->setText(md5FileInfo.fileName());//在lineEdit中输出文件名
         emit checkMd5SumSignal(md5FileName);//把文件的地址作为信号发射出去
     }
}
void Widget::recvMd5CheckSumSlot(const QByteArray &baResult)
{
    ui->textBrowser->setText(baResult);
}
void Widget::recvProgressBarSlot(int current, int total)
{
    ui->progressBar->setMaximum(total);
    ui->progressBar->setValue(current);
    //顺序不能反
}
void Widget::on_pushButtonClose_clicked()
{
    this->close();
}
void Widget::on_pushButtonCopySum_clicked()
{


     QString source=ui->textBrowser->toPlainText();//得到textBrowser上面的内容
       qDebug()<<source;
       QClipboard *clipboard = QApplication::clipboard();//获

取剪切板上的指针
   //QString originalText = clipboard->text();	     //获取剪贴板上文本信息
   clipboard->setText(source);//设置剪切板的内容
}

md5check.cpp

#include "md5check.h"
Md5Check::Md5Check(QObject *parent) : QObject(parent)
{

}
void Md5Check::getMd5CheckSumSlot(const QString &filePath)
{
    QFile file(filePath);
    QByteArray md5Result;
    QFileInfo md5FileInfo;
    md5FileInfo=QFileInfo(filePath);
    int totalSize=md5FileInfo.size()/(1024*1024);//选中文件的大小(这里把字节转化为M)
    if(md5FileInfo.size()%(1024*1024)>0)
    {
        totalSize=totalSize+1;//为了文件的最后不足1M直接加1
    }
    int currentSize=0;
    qDebug()<<"Md5Check::getMd5CheckSumSlot "<<QThread::currentThreadId();
    if(file.open(QIODevice::ReadOnly))
    {
        QCryptographicHash hash(QCryptographicHash::Md5);
        while(!file.atEnd())//如果文件读不出,死不退出
        {
            QByteArray content=file.read(1024*1024);
            hash.addData(content);
            currentSize++;
            emit sendProgressBarSignal(currentSize,totalSize);
        }
        md5Result=hash.result().toHex();
        qDebug()<<md5Result;
        emit sendMd5CheckSignal(md5Result);
        file.close();
    }
    else
    {
        return ;
    }
}

相关文章:

  • 2022-02-02
  • 2021-06-17
  • 2021-10-17
  • 2021-12-16
  • 2022-01-15
  • 2021-07-13
  • 2021-11-30
猜你喜欢
  • 2022-12-23
  • 2021-12-30
  • 2022-01-10
  • 2022-12-23
  • 2021-11-19
  • 2022-01-28
  • 2021-06-30
相关资源
相似解决方案