zoukankan      html  css  js  c++  java
  • 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很相似。他们的强度和其它特性也很相似,但还有以下几点不同:

    1. 对强性攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5要长32位。使用强行技术,产生任何一个 报文使其摘要等于给定报文摘要的难度对MD5为2^128数量级操作,而对SHA-1则是2^160数量级操作。这样,SHA-1对强攻击有更大的优势。
    2. 对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,相比之下,SHA-1则不然。
    3. 速度:相同硬件上,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加密。这足以将碰撞机滤降至很小很小,所以没有绝对的安全,只有更安全。

    更多参考

  • 相关阅读:
    关于安卓9patch图片的探究
    android中系统时间
    android中的对话框
    swing界面刷新问题
    android中的xml解析全解
    android中listView下拉刷新
    次小生成树(poj 1679)
    poj 2312(bfs+priority_queue)
    poj 2060(最小路径覆盖)
    poj 1734 (最小环)
  • 原文地址:https://www.cnblogs.com/itrena/p/5938286.html
Copyright © 2011-2022 走看看