首页 > 其他分享 >Qt 哈希加密 QCryptographicHash

Qt 哈希加密 QCryptographicHash

时间:2024-02-19 14:00:25浏览次数:31  
标签:QByteArray Qt SHA 哈希 QCryptographicHash hash MD5

  QCryptographicHash类提供了生成密码散列的方法。该类可以用于生成二进制或文本数据的加密散列值。目前支持MD4、MD5、SHA-1、SHA-224、SHA-256、SHA-384和SHA-512。

共有类型

  枚举QCryptographicHash::Algorithm:

公共函数

void addData(const char * data, int length)

将第一个字符长度的数据添加到密码散列。

bool addData(QIODevice * device)

从开放的QIODevice设备读取数据,直到结束并计算出哈希值。如果成功读取,返回true。

void addData(const QByteArray & data)

这个函数重载了addData()。

void reset()

重置对象。

QByteArray result() const

获取最终的哈希值。

静态公共函数

QByteArray hash(const QByteArray & data, Algorithm method)

获取data数据的哈希值。

示例

通过静态hase()方法计算:

1 QByteArray byteArray;
2 byteArray.append("password");
3 QByteArray hash = QCryptographicHash::hash(byteArray, QCryptographicHash::Md5);
4 QString strMD5 = hash.toHex();

通过result()方法计算:

1 QByteArray byteArray;
2 byteArray.append("password");
3 QCryptographicHash hash(QCryptographicHash::Md5);
4 hash.addData(byteArray);  // 添加数据到加密哈希值
5 QByteArray result = hash.result();  // 返回最终的哈希值
6 QString strMD5 = result.toHex();

  md5值:5f4dcc3b5aa765d61d8327deb882cf99,可以去找相应的工具进行验证!

  如上所示,无论使用穷举法还是其他手段来破解,都足以说明没有绝对的安全。因为理论上通过逐个查找匹配,是可以破解任何一种密文的,问题只在于如何缩短时间而已。

MD5与SHA-1比较
  二者均由MD4导出,所以SHA-1和MD5很相似。他们的强度和其它特性也很相似,但还有以下几点不同:

  对强性攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5要长32位。使用强行技术,产生任何一个 报文使其摘要等于给定报文摘要的难度对MD5为2128数量级操作,而对SHA-1则是2160数量级操作。这样,SHA-1对强攻击有更大的优势。
  对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,相比之下,SHA-1则不然。
  速度:相同硬件上,SHA-1运行速度比MD5慢。
  碰撞:由于HASH函数产生定长的密文,结果是有限集合。而待处理的明文可以是计算机网络传输的任何信息。也就是说,明文信息是一个无限集合,密文信息却有限,两集合之间无一一对应关系。总有多个不同明文产生相同密文的情况发生,这就是所谓的碰撞。

  MD5与SHA-1曾被认为是足够安全的HASH算法,早在1994就有报告称,运算能力最强的机器,平均24天就可能找到一个MD5碰撞。王小云教授的方法已经为短时间内找到MD5与SHA-1碰撞成为可能。虽然如此,也并不意味着两种方法就此失效,再者,也可以通过自己的手段来进一步处理。比如:通过MD5与SHA结合实现。将A进行MD5处理得到B,将A在进行SHA处理得到C,再将B与C结合(比如:相加),也可把结合后的结果再进行MD5加密。这足以将碰撞机滤降至很小很小,所以没有绝对的安全,只有更安全。

标签:QByteArray,Qt,SHA,哈希,QCryptographicHash,hash,MD5
From: https://www.cnblogs.com/ybqjymy/p/18020942

相关文章

  • Qt 项目实战:电子时钟
    电子时钟隐藏widget边框this->setWindowFlags(Qt::FramelessWindowHint);//隐藏边框实时跟踪鼠标this->setMouseTracking(true);//实时跟踪鼠标通过信号与槽来刷新时针分针秒针状态connect(timer,SIGNAL(timeout()),this,SLOT(update()));鼠标左键按下移动窗......
  • Qt 项目实战:MD5工具开发
    MD介绍MD5消息摘要算法(英语:MD5Message­DigestAlgorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hashvalue),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(RonaldLinnRivest)设计,于1992年公开,用以取代MD4算法。MD5应用编辑......
  • Qt 项目实战:幸运转盘
    幸运电子转盘基础绘图通过paintEvent来绘图鼠标事件:鼠标左键单击开始旋转Timer:定时器信号与槽1#ifndefWIDGET_H2#defineWIDGET_H34#include<QWidget>5#include<QEvent>6#include<QDebug>7#include<QTimer>8#include<QTime>9#include&l......
  • Qt 使用Http协议通信
    介绍使用QT进行应用开发时,有时候需要进行客户端和服务端的网络通信,网络通信常用的一种协议就是http协议。QT对http协议进行了封装,下面将介绍两种http通信方式的使用。在使用http时需要在pro文件中添加对应的模块。QT+=networkhttp主要两种通信方式为get和post......
  • electron delphi winform wpf qt的对比
    Electron、Delphi、WinForms、WPF和Qt都是用于开发桌面应用程序的工具或框架,它们各自有一些独特的优点和适用场景。以下是对这些工具的简要对比:Electron:基于Web技术(HTML、CSS和JavaScript)的跨平台桌面应用程序开发框架。使用Chromium渲染引擎提供强大的页面渲染能力。适用......
  • 字符串匹配——哈希算法
    一、算法原理我们不直接比较字符串\(S\)的字串和模式串\(T\)是否相等,而是比较二者的哈希值。设字符串\(S\)的长度为\(l\),字符串\(T\)的长度为\(m\)。取两个互素的常数\(b\)和\(h\)(\(l<b<h\)),设字符串\(C=c_1c_2...c_m\),则哈希函数为:\[H(C)=(c_1b^{m-1}+......
  • 如何用Qt实现一个无标题栏、半透明、置顶(悬浮)的窗口
    在Qt框架中,要实现一个无标题栏、半透明、置顶(悬浮)的窗口,需要一些特定的设置和技巧。废话不多说,下面我将以DrawClient软件为例,介绍一下实现这种效果的四个要点。要点一:移除标题栏(去除关闭、最小化、最大化按钮)在窗口的构造函数中设置窗口的样式,在强调一下,一定要找构造函数中设置,......
  • Qt实用技巧:QCustomPlot做北斗GPS显示绝对位置运动轨迹和相对位置运动轨迹图的时,使图按
    需求  使用QCustomPlot绘制多个目标的北斗运行轨迹图,包括累计绝对位置图和记录时刻的相对位置图。  当前绘制存在问题:    交付客户前,公司内部自测流程发现的问题。  实际预期效果为:   原因  QCustomPlot加入数据是按照x轴排列,也可以按照y轴排列,使用图层......
  • QT_linux
    加载本地图片/*QPixmap类型对象*/QPixmapimage;/*加载*/image.load(":/image/cd.png");//不缩放ui->label->setScaledContents(false);//图片在标签中居中显示(水平和垂直方向均居中)ui->label->setAlignment(Qt::AlignCenter);pixbad2(":/1/bad.png");......
  • QT打包
    Qt打包程序提示“应用程序无法正常启动(0xc000007b)”/未找到Qt5Core.dll的正确解决方案先打到配置环境变量的页面 ......