QCryptographicHash实现哈希值计算,支持多种算法
本文标题:QCryptographicHash实现哈希值计算,支持多种算法 本文地址:http://techieliang.com/2017/12/668/
1. 介绍
多看看Qt core模块会发现很多惊喜呀,里面包含的类很多涉及到很多方面的功能实现
先附上所有core类:Qt Core,再直接给出QCryptographicHash的帮助:QCryptographicHash
此类用于提供密码散列,哈希值。可以生成二进制或文本形式的hash值,并支持多种算法,算法可以由QCryptographicHash::Algorithm选择
1.1. 支持的算法
| Constant | Value | Description |
|---|---|---|
QCryptographicHash::Md4 |
0 |
Generate an MD4 hash sum |
QCryptographicHash::Md5 |
1 |
Generate an MD5 hash sum |
QCryptographicHash::Sha1 |
2 |
Generate an SHA-1 hash sum |
QCryptographicHash::Sha224 |
3 |
Generate an SHA-224 hash sum (SHA-2). Introduced in Qt 5.0 |
QCryptographicHash::Sha256 |
4 |
Generate an SHA-256 hash sum (SHA-2). Introduced in Qt 5.0 |
QCryptographicHash::Sha384 |
5 |
Generate an SHA-384 hash sum (SHA-2). Introduced in Qt 5.0 |
QCryptographicHash::Sha512 |
6 |
Generate an SHA-512 hash sum (SHA-2). Introduced in Qt 5.0 |
QCryptographicHash::Sha3_224 |
RealSha3_224 |
Generate an SHA3-224 hash sum. Introduced in Qt 5.1 |
QCryptographicHash::Sha3_256 |
RealSha3_256 |
Generate an SHA3-256 hash sum. Introduced in Qt 5.1 |
QCryptographicHash::Sha3_384 |
RealSha3_384 |
Generate an SHA3-384 hash sum. Introduced in Qt 5.1 |
QCryptographicHash::Sha3_512 |
RealSha3_512 |
Generate an SHA3-512 hash sum. Introduced in Qt 5.1 |
QCryptographicHash::Keccak_224 |
7 |
Generate a Keccak-224 hash sum. Introduced in Qt 5.9.2 |
QCryptographicHash::Keccak_256 |
8 |
Generate a Keccak-256 hash sum. Introduced in Qt 5.9.2 |
QCryptographicHash::Keccak_384 |
9 |
Generate a Keccak-384 hash sum. Introduced in Qt 5.9.2 |
QCryptographicHash::Keccak_512 |
10 |
Generate a Keccak-512 hash sum. Introduced in Qt 5.9.2 |
1.2. 提供的接口
- QCryptographicHash(Algorithm method)
- ~QCryptographicHash()
- void addData(const char *data, int length)
- void addData(const QByteArray &data)
- bool addData(QIODevice *device)
- void reset()
- QByteArray result() const
- static QByteArray hash(const QByteArray &data, Algorithm method)
可以实例化此类,构造时需要提供算法类型,然后通过addData需要计算hash的数据,最后通过result获取结果,可以利用reset清空数据但不能修改算法。
还给了一个方便易用的静态方法,直接提供算法类型及数据内容即可。
2. 范例
- #include <QCoreApplication>
- #include <QDebug>
- #include <QCryptographicHash>
- int main(int argc, char *argv[]) {
- QCoreApplication a(argc,argv);
- QString text("test");
- qDebug()<<QCryptographicHash::hash(text.toLatin1(),QCryptographicHash::Md5);//16进制结果
- qDebug()<<QCryptographicHash::hash(text.toLatin1(),QCryptographicHash::Md5).toHex();//转换为字符串
- qDebug()<<QCryptographicHash::hash(text.toLatin1(),QCryptographicHash::Keccak_512);//16进制结果
- qDebug()<<QCryptographicHash::hash(text.toLatin1(),QCryptographicHash::Keccak_512).toHex();//转换为字符串
- return 0;
- }
结果
- "\t\x8Fk\xCD""F!\xD3s\xCA\xDEN\x83&'\xB4\xF6"
- "098f6bcd4621d373cade4e832627b4f6"
- "\x1E.\x9F\xC2\x00+\x00-u\x19\x8Bu\x03!\f\x05\xA1\xBA\xAC""E`\x91j<m\x93\xBC\xCE:P\xD7\xF0\x0F\xD3\x95\xBF\x16G\xB9\xAB\xB8\xD1\xAF\xCC\x9Cv\xC2\x89\xB0\xC9""8;\xA3\x86\xA9V\xDAK8\x93""D\x17x\x9E"
- "1e2e9fc2002b002d75198b7503210c05a1baac4560916a3c6d93bcce3a50d7f00fd395bf1647b9abb8d1afcc9c76c289b0c9383ba386a956da4b38934417789e"
其中test计算md5的结果是098f6bcd4621d373cade4e832627b4f6 可以在相关网站反查结果:http://www.cmd5.com/,可以证明计算正确。
QCryptographicHash实现哈希值计算,支持多种算法的更多相关文章
- C#的MD5哈希值计算
MD5哈希值计算:(仅仅是记录一下) /// <summary> /// 获取字符串的MD5值 /// </summary> /// <param name=" ...
- Java中String的哈希值计算
下面都是从String类的源码中粘贴出来的 private int hash; // Default to 0 public int hashCode() { int h = hash; if (h ...
- Java 对象的哈希值是每次 hashCode() 方法调用重计算么?
对于没有覆盖hashCode()方法的对象 如果没有覆盖 hashCode() 方法,那么哈希值为底层 JDK C++ 源码实现,实例每次调用hashcode()方法,只有第一次计算哈希值,之后哈希值 ...
- C# 计算字符串/文件的哈希值(MD5、SHA)
原文 C# 计算字符串的哈希值(MD5.SHA) 已做修改 一.关于本文 本文中是一个类库,包括下面几个函数: /// 1)计算32位MD5码(大小写):Hash_MD5_32 /// 2)计算16位 ...
- 图像相似度计算之哈希值方法OpenCV实现
http://blog.csdn.net/fengbingchun/article/details/42153261 图像相似度计算之哈希值方法OpenCV实现 2014-12-25 21:27 29 ...
- PHP使用hash_algos函数计算哈希值,之间的性能排序
PHP从5.1.2版本以上开始支持hash_algos函数,看这个名字就知道了,algos在英文中也表示算法的意思,hash_algos就是哈希算法,收集了一些常用的哈希算法,从5.1.2开始不同版本 ...
- 2021-2-17:Java HashMap 的中 key 的哈希值是如何计算的,为何这么计算?
首先,我们知道 HashMap 的底层实现是开放地址法 + 链地址法的方式来实现. 即数组 + 链表的实现方式,通过计算哈希值,找到数组对应的位置,如果已存在元素,就加到这个位置的链表上.在 Java ...
- win10下计算文件哈希值的方法
cmd下使用certutil命令 使用方法: certutil -hashfile FILE_NAME ALGORITHM_NAME 支持的加密算法包括:MD2,MD4,MD5,SHA1,SHA256 ...
- day30 __hash__ 计算哈希值
hash() # __hash__哈希的时候会根据内存地址进行哈希,因为地址不同所以哈希的值也不同,哪怕是完全一样子的属性得出的哈希值也不一样因此存在需要某些时刻期望属性相同得出相同哈希值可以控制对象 ...
随机推荐
- Python使用代理的方法
我们在做爬虫的过程中经常会遇到这样的情况:最初爬虫正常运行,正常抓取数据,一切看起来都是那么的美好,然而一杯茶的功夫可能就会出现错误,比如403 Forbidden:出现这样的原因往往是网站采取了一些 ...
- DP_最长公共子序列/动规入门
学自:https://open.163.com/movie/2010/12/L/4/M6UTT5U0I_M6V2U1HL4.html 最长公共子序列:(本文先谈如何求出最长公共子序列的长度,求出最长公 ...
- 利用“海底捞算法”在MongoDB中优雅地存储一棵树
目前常见的树形结构数据库存储方案有以下四种,但是在处理无限深度.海量数据的树结构时,都存在一些问题: 1)Adjacency List(邻接表):每个节点仅记录父节点主键.优点是简单,缺点是访问子树需 ...
- 20155318 2016-2017-2 《Java程序设计》第三周学习总结
20155318 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 一.类与对象 Clothes c1 = new Clothes();将c1名称参考至新建对象 ...
- 20155322 2016-2017-2 《Java程序设计》第9周学习总结
20155322 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 第9周学习的主要内容是课本的第十六.第十七.第十八章,老师的教学指导上主要要求学习以下知识点 ...
- 20155328 实验四 Android程序设计 实验报告
20155328 实验四 Android程序设计 第24章 初识Android 提交点1:完成HelloWorld并显示自己的学号 安装Android Studio后,创建了属于自己的Project( ...
- 【转载】OGRE中用到的设计模式
原文:OGRE中用到的设计模式 1. 单例模式(Singleton) 2. 工厂方法(Factory Method) 3. 适配器模式(Adapter) 4. ...
- Java中如何创建一个确保唯一的名字,文件名
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客要讲的有,如何创建一个唯一的文件名,创建一个唯一的String字符串 为什么要创建唯一呢?再很多情况下 ...
- python常用模块详解2
序列化模块补充: 1.json格式的限制,json格式的key必须是字符串数据类型 2.json格式的字符串必须是"" 如果数字是key,那么dump之后会强转成字符串数据类型 i ...
- 04-JVM内存模型:直接内存
1.1.什么是直接内存(Derect Memory) 在内存模型最开始的章节中,我们画出了JVM的内存模型,里面并不包含直接内存,也就是说这块内存区域并不是JVM运行时数据区的一部分,但它却会被频繁的 ...