QT MD5校验文件和数据的完整性

MD5介绍:

‌MD5,全称为‌‌Message-Digest Algorithm 5(消息摘要算法5)‌,是一种广泛使用的密码散列函数。它可以将任意长度的"字节串"变换成一个128位(16字节)的散列值(hash value),通常表示为32个十六进制数。

MD5用途:

确保信息传输的完整一致。通过对比信息的MD5值,可以验证信息在传输过程中是否被篡改。

在很多操作系统中,用户的密码通常是以MD5值的方式保存的,用于验证用户密码的正确性。

QT中使用到的类:

QCryptographicHash,是 Qt 框架中提供的一个类,它用于实现加密散列函数,也就是我们常说的哈希函数。哈希函数能够将任意长度的数据转换为固定长度的哈希值,这个哈希值通常用于数据的完整性校验、密码存储等场景。

支持:MD4、MD5、SHA-1、SHA-224、SHA-256、SHA-384 和 SHA-512,这些算法被广泛认为是安全的。使用这些哈希算法可以增强应用程序的数据安全性。

使用方法:

使用MD5枚举方式创建类对象

QCryptographicHash hash(QCryptographicHash::Md5);

加载数据

hash.addData(data);

转换成MD5值

hash.result().toHex()

相关代码:

字符串加密

csharp 复制代码
void Widget::on_makeBtn2_clicked()
{
    QCryptographicHash hash(QCryptographicHash::Md5);
    QString data = ui->lineEdit2->text();
    hash.addData(data.toUtf8());
    ui->md5Show2->setText(hash.result().toHex());
}

文件加密

csharp 复制代码
QString Widget::MakeMd5(const QString &sourceFilePath)
{
    QFile sourceFile(sourceFilePath);
    qint64 fileSize = sourceFile.size();
    const qint64 bufferSize = 1024*10;

    if (sourceFile.open(QIODevice::ReadOnly)) {
        char buffer[bufferSize];
        int bytesRead;
        int readSize = qMin(fileSize, bufferSize);

        QCryptographicHash hash(QCryptographicHash::Md5);

        while (readSize > 0 && (bytesRead = sourceFile.read(buffer, readSize)) > 0) {
            fileSize -= bytesRead;
            hash.addData(buffer, bytesRead);
            readSize = qMin(fileSize, bufferSize);
        }

        sourceFile.close();
        return QString(hash.result().toHex());
    }
    return QString();
}

源码

相关推荐
Z9fish5 分钟前
sse哈工大C语言编程练习20
c语言·开发语言·算法
萧鼎30 分钟前
Python 包管理的“超音速”革命:全面上手 uv 工具链
开发语言·python·uv
Anastasiozzzz1 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
刘琦沛在进步1 小时前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
机器视觉的发动机1 小时前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
HyperAI超神经1 小时前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新
R_.L2 小时前
【QT】常用控件(按钮类控件、显示类控件、输入类控件、多元素控件、容器类控件、布局管理器)
开发语言·qt
Zach_yuan2 小时前
自定义协议:实现网络计算器
linux·服务器·开发语言·网络
云姜.2 小时前
java多态
java·开发语言·c++
CoderCodingNo2 小时前
【GESP】C++五级练习题 luogu-P1865 A % B Problem
开发语言·c++·算法