Qt之QCryptographicHash
简述
QCryptographicHash类提供了生成密码散列的方法。该类可以用于生成二进制或文本数据的加密散列值。目前支持MD4、MD5、SHA-1、SHA-224、SHA-256、SHA-384和SHA-512。
共有类型
枚举QCryptographicHash::Algorithm:
| 常量 | 取值 | 描述 |
|---|---|---|
| QCryptographicHash::Md4 | 0 | 生成一个MD4散列 |
| QCryptographicHash::Md5 | 1 | 生成一个MD5散列 |
| QCryptographicHash::Sha1 | 2 | 生成一个SHA-1散列 |
| QCryptographicHash::Sha224 | 3 | 生成一个SHA-224散列(SHA-2) |
| QCryptographicHash::Sha256 | 4 | 生成一个SHA-256散列(SHA-2) |
| QCryptographicHash::Sha384 | 5 | 生成一个SHA-384散列(SHA-2) |
| QCryptographicHash::Sha512 | 6 | 生成一个SHA-512散列(SHA-2) |
| QCryptographicHash::Sha3_224 | 7 | 生成一个SHA3-224散列 |
| QCryptographicHash::Sha3_256 | 8 | 生成一个SHA3-256散列 |
| QCryptographicHash::Sha3_384 | 9 | 生成一个SHA3-384散列 |
| QCryptographicHash::Sha3_512 | 10 | 生成一个SHA3-512散列 |
公共函数
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()方法计算:
QByteArray byteArray;
byteArray.append("password");
QByteArray hash = QCryptographicHash::hash(byteArray, QCryptographicHash::Md5);
QString strMD5 = hash.toHex();
通过result()方法计算:
QByteArray byteArray;
byteArray.append("password");
QCryptographicHash hash(QCryptographicHash::Md5);
hash.addData(byteArray); // 添加数据到加密哈希值
QByteArray result = hash.result(); // 返回最终的哈希值
QString strMD5 = result.toHex();
md5值:5f4dcc3b5aa765d61d8327deb882cf99,可以去找相应的工具进行验证!
如上所示,无论使用穷举法还是其他手段来破解,都足以说明没有绝对的安全。因为理论上通过逐个查找匹配,是可以破解任何一种密文的,问题只在于如何缩短时间而已。
MD5与SHA-1比较
二者均由MD4导出,所以SHA-1和MD5很相似。他们的强度和其它特性也很相似,但还有以下几点不同:
- 对强性攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5要长32位。使用强行技术,产生任何一个 报文使其摘要等于给定报文摘要的难度对MD5为2^128数量级操作,而对SHA-1则是2^160数量级操作。这样,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加密。这足以将碰撞机滤降至很小很小,所以没有绝对的安全,只有更安全。
更多参考
Qt之QCryptographicHash的更多相关文章
- 《Qt 实战一二三》
简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的 ...
- Qt 框架 开发HTTP 服务器 开发记录
最近需求需要开发一款 HTTP ,然后由于先前接触过Qt,就直接用Qt写HTTP服务器了,也是为了当作练手,要不然是直接上HTTP框架的. 后端用C++ Qt框架 前端为了练手 当然是纯生的 js h ...
- Qt之加密算法
在写这篇文章之前,我曾反复思量关于加密的叫法是否准确,更为严格来说,应该是密码散列-将数据(如中英文字母.特殊字符)通过复杂的算法转换为另一种固定长度的值. QCryptographi ...
- 【局域网聊天客户端篇】基于socket与Qt
前言 暑假把linux下的高级编程和网络编程学习了一遍,学习很重要,但是也得有个练手的地方,所以必须做做项目来认识下自己所学习的知识. 能够找到小伙伴一起做项目也是一件很快乐的事情的,很幸运的有两个小 ...
- Qt日常备注(函数/接口实现)
1.判断QString是否为纯数字 2.查找自身最长重复子字符串 3.树形列表复选框操作 4.更改文件权限 5.判断系统64位 6.文件生成md5值 7.版本号比较(字符串比较) //-----实现- ...
- 1.关于QT中json数据处理和密码md5加密
新建一个Qt空项目 17Json.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += widgets gui MyWidget ...
- Qt 编程指南 4 单行编辑控件
从 Qt 设计师界面可以看到常用的 Qt 文本编辑和浏览控件,包括四个: 其中单行编辑控件 QLineEdit 和 普通文本编辑控件 QPlainTextEdit 都是针对最普通的 C++ 字符串编辑 ...
- qt 5.2.1类和模块的关系图
QT│ ├─ActiveQt│ │ ActiveQt│ │ ActiveQtDepends│ │ ActiveQtVersion│ │ QAxAggregated│ │ QAxB ...
- 使用Qt框架开发http服务器问题的记录
最近需求需要开发一款 HTTP ,然后由于先前接触过Qt,就直接用Qt写HTTP服务器了,也是为了当作练手,要不然是直接上HTTP框架的. 后端用C++ Qt框架 前端为了练手 当然是纯生的 js h ...
随机推荐
- splay 文艺平衡树 (数据结构)
题目大意:略 splay维护区间翻转裸题,为了减少不必要的麻烦,多插入两个点,分别是0和n+1 每次找区间的第K个值,就在splay上二分即可 顺便学了一下splay的完美建树,而且splay有一些小 ...
- [luogu2501 HAOI2006] 数字序列 (递推LIS)
题目描述 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变的幅度太大. 输入输出格式 输入格式: 第一行包含一个数 ...
- Map的四种遍历方法
1.取值遍历 for(String key:map.keySet()){ System.out.println("key="+key+"and value=" ...
- ASP.NET-POSTBACK是什么
当我们直接从服务端读取网页时,表时此网页并没有post(提交),当用户再次提交表单时,就会把此网页的相关参数传给服务器处理,对于服务器来说就是一个postback(提交返回),即提交回来了.这就是po ...
- JavaScript正則表達式知识汇总
Js 正則表達式知识汇总 正則表達式: 1.什么是RegExp?RegExp是正則表達式的缩写.RegExp 对象用于规定在文本中检索的内容. 2.定义RegExp:var +变量名=new RegE ...
- srw阅读笔记
第一章 p11,不要使用we来代表普遍意义上的人们,使用形式主语和被动语态
- iOS-MBProgressHUD使用
在码代码过程中,我们经常用到MBProgressHUD,但我很少实例化使用,一般都是偷个懒直接显示隐藏,这里贴上详解,以便日后有样式要求时使用. 1,MBProgressHUD常用属性和用法Demo ...
- 唯品会API网关设计与实践--转
原文地址:https://609518.kuaizhan.com/86/70/p4108366952248f 刘璟宇Leo 唯品会资深研发工程师,在大型高性能分布式系统设计和开发方面有丰富的经验.目前 ...
- Linux基础01
** 一些老生常谈的问题 一提起Linux,行业内无人不知<鸟哥私房菜>,就是放在胸口可以防弹的那种书,虽说经典.全面,但对于初学者而言,确实过于厚重,而且容易学着后边忘了前边,毕竟实际操 ...
- 将枚举存入map集合
遍历枚举存入集合: Map<String,Object> deptLevel = new HashMap<>(); for(OrgBussinessEnum orgBussin ...