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

news/2025/2/27 0:18:00

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()

相关代码:
字符串加密

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

文件加密

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

源码


http://www.niftyadmin.cn/n/5869307.html

相关文章

【 C# 字符转换为 Unicode 编码】

在 C# 中,将字符转换为 Unicode 编码(即字符的 Unicode 码点)非常简单。每个字符在 C# 中都是一个 char 类型,而 char 类型本质上是一个 16 位的 Unicode 字符。你可以通过以下方法将字符转换为 Unicode 编码: 1. 使用…

JSPSSM526SpringBoot 教师人事档案管理系统功能说明

JSPSSM526SpringBoot 教师人事档案管理系统功能说明 JSPSSM526SpringBoot教师人事档案管理系统是一款专为教育机构设计的高效、安全、易用的信息化管理系统。该系统基于Spring Boot框架开发,结合JSP(JavaServer Pages)技术,旨在帮…

STM32+ESP8266局域网通信

若该文为原创文章,转载请注明原文出处。 此篇记录如何使用APP,在局域网内和STM32通信,并远程控制。 一、原理 STM32通过串口AT指令控制ESP8266(ESP-01S), ESP8266会产生一个热点,并创建了TCP服务,手机连接热点&#…

Solidity 开发环境

Solidity 开发环境 Solidity编辑器:Solidity编辑器是⼀种专⻔⽤于编写和编辑Solidity代码的编辑器。常⽤的Solidity编辑器包括 Visual Studio Code、Atom和Sublime Text。以太坊开发环境:以太坊开发环境(Ethereum Development Environment&a…

PHP Zip 文件处理指南

PHP Zip 文件处理指南 引言 ZIP文件是一种流行的压缩格式,广泛用于文件压缩和归档。PHP作为一门强大的服务器端脚本语言,提供了丰富的类和方法来处理ZIP文件。本文将详细介绍PHP中ZIP文件的处理方法,包括创建、添加文件、提取文件以及压缩和…

双重因子认证:守护数字安全的“双保险”

在数字化时代,网络安全问题日益凸显,个人信息和资产面临着诸多威胁。为了应对这些挑战,双重因子认证(Two-Factor Authentication,简称2FA)应运而生,成为一种重要的安全防护手段。 一、什么是双…

使用 Conda 管理 R 语言

1. 引言 在数据科学和统计分析领域,R 语言 是一门强大的编程语言,广泛用于数据可视化、统计建模和机器学习等任务。与 Python 相似,R 也有大量的开源包和库支持其功能。然而,在项目中使用 R 语言时,如何高效管理其环境…

【DeepSeek】【GPT-Academic】:DeepSeek集成到GPT-Academic(官方+第三方)

目录 1 官方deepseek 1.1 拉取学术GPT项目 1.2 安装依赖 1.3 修改配置文件中的DEEPSEEK_API_KEY 2 第三方API 2.1 修改DEEPSEEK_API_KEY 2.2 修改CUSTOM_API_KEY_PATTERM 2.3 地址重定向 2.4 修改模型参数 2.5 成功调用 2.6 尝试添加一个deepseek-r1参数 3 使用千帆…