当前位置: 首页 > news >正文

Qt 哈希加密之 QCryptographicHash

 【写在前面】

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

        什么是哈希函数?

        哈希函数是一种单向函数,它可以接收一个输入(或称为消息),然后返回一个固定大小的输出,这个输出就是哈希值。哈希函数具有以下几个特点:

  1. 确定性:相同的输入总是产生相同的输出。
  2. 快速计算:计算哈希值的速度非常快。
  3. 抗篡改性:即使输入数据发生微小的变化,输出的哈希值也会发生显著变化。
  4. 雪崩效应:输入的微小变化会导致输出的显著变化。
  5. 难以逆向:从哈希值几乎不可能逆推出原始输入。

【正文开始】

        QCryptographicHash 主要使用场景如下:

1. 安全性增强

        QCryptographicHash 提供了多种加密哈希算法:MD4MD5、SHA-1、SHA-224、SHA-256SHA-384SHA-512,这些算法被广泛认为是安全的。使用这些哈希算法可以增强应用程序的数据安全性。

2. 数据完整性验证

        在文件传输或存储过程中,数据可能会因为各种原因而遭到篡改。使用 QCryptographicHash 可以生成数据的哈希值,通过比较哈希值来验证数据的完整性。

3. 密码存储

        在用户注册或登录时,直接存储用户密码是不安全的。使用 QCryptographicHash 对密码进行哈希处理,可以安全地存储密码的哈希值,即使数据库被泄露,攻击者也无法直接获取原始密码。

4. 数字签名

        在数字签名中,QCryptographicHash 用于生成消息的摘要,然后使用私钥对摘要进行加密,生成数字签名。接收方可以通过公钥验证签名的有效性,确保消息的来源和完整性。

5. 防止重放攻击

        在某些场景下,比如网络通信,使用 QCryptographicHash 可以生成基于时间戳和数据内容的哈希值,以防止攻击者重放旧的数据包。

        QCryptographicHash 使用方法:

        1、包含头文件:在使用 QCryptographicHash 之前,需要包含相应的头文件 #include <QCryptographicHash>

        2、计算哈希值:

        - 使用静态方法:可以直接调用 QCryptographicHash::hash() 方法,传入待计算哈希值的数据和选择的算法,即可得到哈希值的 QByteArray 表示。

        - 使用对象方法:首先创建 QCryptographicHash 对象,并指定要使用的算法。然后,使用 addData() 方法添加数据,最后调用 result() 方法获取最终的

        示例如下:

#include <QCryptographicHash>  
#include <QByteArray>  
#include <QString>  int main() {  QByteArray byteArray;  byteArray.append("password");  // 使用静态方法计算哈希值  QByteArray hash = QCryptographicHash::hash(byteArray, QCryptographicHash::Md5);  QString strMD5 = hash.toHex(); // 将哈希值转换为十六进制字符串  // 输出哈希值  qDebug() << strMD5; // 输出: 5f4dcc3b5aa765d61d8327deb882cf99  return 0;  
}

【结语】

       注意哈希算法的选择应根据具体的应用场景和安全需求来确定。

        例如,MD5 SHA-1 由于存在安全漏洞,已经不再推荐用于密码存储等安全敏感的场景。 哈希值是不可逆的,即不能通过哈希值恢复原始数据。 不同的哈希算法在输出长度、计算速度和安全性等方面存在差异,开发时应根据实际需求进行选择。

相关文章:

Qt 哈希加密之 QCryptographicHash

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

渗透第二次作业

目录 简述rce漏洞 可能产生rce漏洞的函数 RCE代码执行漏洞示例 贷齐乐系统多处SQL注入漏洞 ​编辑 爆出库名 爆出表名 爆出表下的列名 查flag数据 简述rce漏洞 ​ rce漏洞&#xff0c;即远程代码执行和远程命令执行漏洞。这种漏洞允许攻击者在后台服务器上远程注入操作…...

42.【C语言】冒泡排序

目录&#xff1a; 冒泡排序 *核心思想 *分析 *代码 *优化 15.冒泡排序(bubble sort) *核心思想&#xff1a;两两相邻的元素进行比较&#xff0c;满足条件则两者交换 *分析 现要求升序排序 输入: 9 8 7 6 5 4 3 2 1 0 输出&#xff1a;0 1 2 3 4 5 6 7 8 9 下面展示一趟冒泡排…...

Linux安全与高级应用(七)深入Linux Shell脚本编程:循环与分支结构的高级应用

文章目录 深入Linux Shell脚本编程&#xff1a;循环与分支结构的高级应用一、循环结构详解1. for循环1.1 应用示例&#xff1a;检查主机状态 2. while循环2.1 应用示例&#xff1a;猜价格游戏 二、分支结构详解1. if语句1.1 单分支结构1.2 双分支结构1.3 多分支结构 2. case语句…...

python爬虫滑块验证及各种加密函数(基于ddddocr进行的一层封装)

git链接: https://github.com/JOUUUSKA/spider_toolsbox 这里写目录标题 一.识别验证码1、识别英文&#xff0b;数字验证码2、识别滑块验证码3、识别点选验证码 一.识别验证码 git链接: https://github.com/JOUUUSKA/spider_toolsbox 创作不易记得stars 1、识别英文&#xf…...

pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)

文章目录 前言一、miniconda和anaconda的关系1、Anaconda2、Miniconda3、总结 二、下载miniconda&#xff08;清华镜像链接&#xff09;三、安装miniconda1、安装2、或许要手动加载 ~/.bashrc 四、配置 命令1、查看anaconda安装博文2、取消默认进入conda&#xff08;base&#…...

说一下Android中的IdleHandler

IdleHandler 是 Android 中的一个接口&#xff0c;常用于在主线程空闲时执行一些低优先级的任务。 作用&#xff1a; 它提供了一种在主线程空闲时执行额外操作的机制&#xff0c;能够优化应用的性能和资源利用。 工作原理&#xff1a; 当主线程没有其他任务需要处理&#xff…...

Flake8 和 Autopep8 使用指南

Flake8 和 Autopep8 集成到 CI/CD 流程中&#xff0c;确保在代码提交和合并时自动进行检查和格式化&#xff0c;如果Autopep8格式化检查无法通过Flake8校验&#xff0c;说明pycodestyle版本依赖不兼容&#xff0c;参考文章&#xff1a;Flake8 与 Autopep8 兼容性指南 Flake8 使…...

OpenHarmony(数据)通信协议、数据存储—protobuf

介绍 ProtoBuf(protocol buffers) 是一种语言无关、平台无关、可扩展的序列化结构数据的方法&#xff0c;它可用于&#xff08;数据&#xff09;通信协议、数据存储等。,是一种灵活&#xff0c;高效&#xff0c;自动化机制的结构数据序列化方法比XML更小,更快,更为简单。 本项…...

vue3 依赖注入 vueRouter vuex

目录 01 依赖注入 02 组合式API里面的vueRouter 03 组合式API中的vuex的使用 01 依赖注入 使用场景&#xff1a; 有一个父组件&#xff0c;里头有子组件&#xff0c;有孙组件&#xff0c;有很多后代组件&#xff0c;共享父组件数据。 1.组先组件给后代组件传参 组先组件: 从…...

在Windows上用Visual Studio编译OpenCV

在Windows上编译开源项目&#xff0c;有时候让人痛不欲生&#xff0c;有时候却出奇地顺利。OpenCV属于后者。本文记录这次愉快的过程。 注&#xff1a;OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它提供了大…...

详解2024年最值得推荐的5款CRM软件:如何选择适合企业需求的CRM系统?

在文章开始之前&#xff0c;我们前来了解下&#xff1a;什么是CRM系统&#xff1f; CRM系统&#xff0c;即客户关系管理系统&#xff0c;顾名思义&#xff0c;它是企业用来管理和维护与客户之间关系的重要工具。通过CRM系统&#xff0c;企业能够全面了解客户需求&#xff0c;优…...

2024靠谱的网站建设公司推荐

在现在的互联网社会&#xff0c;一个企业的网站往往是潜在客户对该品牌的第一印象来源。也正因如此&#xff0c;选择一个靠谱的网站建设公司对于确保企业在线形象和功能性至关重要&#xff0c;作为建站行业从业人员&#xff0c;我分享几个选择网站建设公司时应考虑的几个关键因…...

第一天:Java基础与环境搭建

第一天&#xff1a;Java基础与环境搭建 1. 理解Java基本概念 了解Java语言的历史&#xff1a;Java是一种广泛使用的编程语言&#xff0c;由Sun Microsystems&#xff08;现被Oracle收购&#xff09;于1995年首次发布。认识Java的特性&#xff1a;包括面向对象、平台无关性&am…...

动画魔法秀:JavaScript前端动画实战指南

标题&#xff1a;动画魔法秀&#xff1a;JavaScript前端动画实战指南 在现代Web开发中&#xff0c;动画不仅能够提升用户体验&#xff0c;还能使网页更加生动有趣。JavaScript作为实现前端动画的重要工具之一&#xff0c;提供了多种方式来创建平滑且吸引人的动画效果。本文将详…...

实训日记day26

NAT服务配置 1.关闭防火墙和selinux [root2 ~]# setenforce 0 [root2 ~]# vim /etc/selinux/config [root2 ~]# systemctl stop firewalld [root2 ~]# systemctl disable firewalld 2.安装nginx &#xff08;web1和web2&#xff09; [root2 ~]# yum install -y gcc-c pcre pcr…...

自定义实现一个 Redis 客户端

要自定义实现一个 Redis 客户端并支持密码认证&#xff0c;你可以使用 TCP socket 直接与 Redis 服务器进行通信。下面是如何通过 Java 自定义实现一个简单的 Redis 客户端的详细示例&#xff0c;包括如何发送密码进行认证。 Redis 协议概述 Redis 使用一种称为 RESP&#xf…...

sql注入——sqlilabs16-26

文章目录 less-163.注入 less-172.数据库名2.1 floor报错注入数据库名 3.查到数据表3.1floor 报错注入数据表 4.查取列名4.1 floor报错注入 列名 5.查取内容 less-181.添加X-Forwarded-For测试2修改User-Agent测试3.查数据表名4.查数据列5.查取数据 less-192.查数据库3.查数据表…...

数据加载工具pg_bulkload插件的介绍

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;12 文档用途 本文档主要介绍pg_bulkload插件的安装与使用。 详细信息 研发公司&#xff1a;NTT OSS Center DBMS Development and Support Team&…...

Windows禁止应用联网

转自两种方法阻止电脑上的软件彻底联网&#xff01; - 知乎 (zhihu.com) 但为了稳妥&#xff0c;自己还是稍微记录一下 1、创建bat脚本文件 创建文本-将下面的代码填入-保存为.bat文件 Echo Off SetLocal:beginecho: echo ****** 禁止文件夹联网 ****** echo:set /p folder…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码&#xff1a;冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...