首页 > 其他分享 >Qt 中md5 计算

Qt 中md5 计算

时间:2023-05-22 20:11:26浏览次数:45  
标签:case Qt Keccak break result 计算 copy data md5

#include <QCryptographicHash>

QByteArray hash2 = QCryptographicHash::hash(password.toLocal8Bit(), QCryptographicHash::Md5);
auto pwd = hash2.toHex().toStdString();

源代码


QByteArray QCryptographicHash::hash(const QByteArray &data, Algorithm method)
{
    QCryptographicHash hash(method);
    hash.addData(data);
    return hash.result();
}

void QCryptographicHash::addData(const QByteArray &data)
{
    addData(data.constData(), data.length());
}

void QCryptographicHash::addData(const char *data, int length)
{
    switch (d->method) {
    case Sha1:
        sha1Update(&d->sha1Context, (const unsigned char *)data, length);
        break;
#ifdef QT_CRYPTOGRAPHICHASH_ONLY_SHA1
    default:
        Q_ASSERT_X(false, "QCryptographicHash", "Method not compiled in");
        Q_UNREACHABLE();
        break;
#else
    case Md4:
        md4_update(&d->md4Context, (const unsigned char *)data, length);
        break;
    case Md5:
        MD5Update(&d->md5Context, (const unsigned char *)data, length);
        break;
    case Sha224:
        SHA224Input(&d->sha224Context, reinterpret_cast<const unsigned char *>(data), length);
        break;
    case Sha256:
        SHA256Input(&d->sha256Context, reinterpret_cast<const unsigned char *>(data), length);
        break;
    case Sha384:
        SHA384Input(&d->sha384Context, reinterpret_cast<const unsigned char *>(data), length);
        break;
    case Sha512:
        SHA512Input(&d->sha512Context, reinterpret_cast<const unsigned char *>(data), length);
        break;
    case RealSha3_224:
    case Keccak_224:
        sha3Update(&d->sha3Context, reinterpret_cast<const BitSequence *>(data), quint64(length) * 8);
        break;
    case RealSha3_256:
    case Keccak_256:
        sha3Update(&d->sha3Context, reinterpret_cast<const BitSequence *>(data), quint64(length) * 8);
        break;
    case RealSha3_384:
    case Keccak_384:
        sha3Update(&d->sha3Context, reinterpret_cast<const BitSequence *>(data), quint64(length) * 8);
        break;
    case RealSha3_512:
    case Keccak_512:
        sha3Update(&d->sha3Context, reinterpret_cast<const BitSequence *>(data), quint64(length) * 8);
        break;
#endif
    }
    d->result.clear();
}

QByteArray QCryptographicHash::result() const
{
    if (!d->result.isEmpty())
        return d->result;

    switch (d->method) {
    case Sha1: {
        Sha1State copy = d->sha1Context;
        d->result.resize(20);
        sha1FinalizeState(&copy);
        sha1ToHash(&copy, (unsigned char *)d->result.data());
        break;
    }
#ifdef QT_CRYPTOGRAPHICHASH_ONLY_SHA1
    default:
        Q_ASSERT_X(false, "QCryptographicHash", "Method not compiled in");
        Q_UNREACHABLE();
        break;
#else
    case Md4: {
        md4_context copy = d->md4Context;
        d->result.resize(MD4_RESULTLEN);
        md4_final(&copy, (unsigned char *)d->result.data());
        break;
    }
    case Md5: {
        MD5Context copy = d->md5Context;
        d->result.resize(16);
        MD5Final(&copy, (unsigned char *)d->result.data());
        break;
    }
    case Sha224: {
        SHA224Context copy = d->sha224Context;
        d->result.resize(SHA224HashSize);
        SHA224Result(&copy, reinterpret_cast<unsigned char *>(d->result.data()));
        break;
    }
    case Sha256:{
        SHA256Context copy = d->sha256Context;
        d->result.resize(SHA256HashSize);
        SHA256Result(&copy, reinterpret_cast<unsigned char *>(d->result.data()));
        break;
    }
    case Sha384:{
        SHA384Context copy = d->sha384Context;
        d->result.resize(SHA384HashSize);
        SHA384Result(&copy, reinterpret_cast<unsigned char *>(d->result.data()));
        break;
    }
    case Sha512:{
        SHA512Context copy = d->sha512Context;
        d->result.resize(SHA512HashSize);
        SHA512Result(&copy, reinterpret_cast<unsigned char *>(d->result.data()));
        break;
    }
    case RealSha3_224: {
        d->sha3Finish(224, QCryptographicHashPrivate::Sha3Variant::Sha3);
        break;
    }
    case RealSha3_256: {
        d->sha3Finish(256, QCryptographicHashPrivate::Sha3Variant::Sha3);
        break;
    }
    case RealSha3_384: {
        d->sha3Finish(384, QCryptographicHashPrivate::Sha3Variant::Sha3);
        break;
    }
    case RealSha3_512: {
        d->sha3Finish(512, QCryptographicHashPrivate::Sha3Variant::Sha3);
        break;
    }
    case Keccak_224: {
        d->sha3Finish(224, QCryptographicHashPrivate::Sha3Variant::Keccak);
        break;
    }
    case Keccak_256: {
        d->sha3Finish(256, QCryptographicHashPrivate::Sha3Variant::Keccak);
        break;
    }
    case Keccak_384: {
        d->sha3Finish(384, QCryptographicHashPrivate::Sha3Variant::Keccak);
        break;
    }
    case Keccak_512: {
        d->sha3Finish(512, QCryptographicHashPrivate::Sha3Variant::Keccak);
        break;
    }
#endif
    }
    return d->result;
}
QCryptographicHash::QCryptographicHash(Algorithm method)
    : d(new QCryptographicHashPrivate)
{
    d->method = method;
    reset();
}

void QCryptographicHash::reset()
{
    switch (d->method) {
    case Sha1:
        sha1InitState(&d->sha1Context);
        break;
#ifdef QT_CRYPTOGRAPHICHASH_ONLY_SHA1
    default:
        Q_ASSERT_X(false, "QCryptographicHash", "Method not compiled in");
        Q_UNREACHABLE();
        break;
#else
    case Md4:
        md4_init(&d->md4Context);
        break;
    case Md5:
        MD5Init(&d->md5Context);
        break;
    case Sha224:
        SHA224Reset(&d->sha224Context);
        break;
    case Sha256:
        SHA256Reset(&d->sha256Context);
        break;
    case Sha384:
        SHA384Reset(&d->sha384Context);
        break;
    case Sha512:
        SHA512Reset(&d->sha512Context);
        break;
    case RealSha3_224:
    case Keccak_224:
        sha3Init(&d->sha3Context, 224);
        break;
    case RealSha3_256:
    case Keccak_256:
        sha3Init(&d->sha3Context, 256);
        break;
    case RealSha3_384:
    case Keccak_384:
        sha3Init(&d->sha3Context, 384);
        break;
    case RealSha3_512:
    case Keccak_512:
        sha3Init(&d->sha3Context, 512);
        break;
#endif
    }
    d->result.clear();
}

标签:case,Qt,Keccak,break,result,计算,copy,data,md5
From: https://www.cnblogs.com/simp/p/17421616.html

相关文章

  • 计算题总结
    目录计算题1.给定一个长度为n的整数数组nums和一个目标值target,请你从nums中选出三个整数,使得它们的和与target最接近。2.以下是一个函数的示例代码,它接受一个32位有符号整数x,并返回其数字部分反转后的结果。如果反转后的整数超出了32位有符号整数的范围[-2^31,2^31-1]......
  • 51 | 分布式计算:如果所有人的大脑都联网会怎样?
    今天是原理篇的最后一篇。过去50讲,我们一起看了抽象概念上的计算机指令,看了这些指令怎么拆解成一个个简单的电路,以及CPU是怎么通过一个一个的电路组成的。我们还一起看了高速缓存、内存、SSD硬盘和机械硬盘,以及这些组件又是怎么通过总线和CPU连在一起相互通信的。......
  • 42 | 总线:计算机内部的高速公路
    专栏讲到现在,如果我再问你,计算机五大组成部分是什么,应该没有人不知道了吧?我们这一节要讲的内容,依然要围绕这五大部分,控制器、运算器、存储器、输入设备和输出设备。CPU所代表的控制器和运算器,要和存储器,也就是我们的主内存,以及输入和输出设备进行通信。那问题来了,CPU从......
  • Qt之事件系统
    Qt中,事件作为一个对象,继承自QEvent类,常见的有键盘事件QKeyEvent、鼠标事件QMouseEvent和定时器事件QTimerEvent等。常见的处理事件的方法如下:(1).重新实现部件的paintEvent、mousePressEvent()等事件处理函数,这是最常用的一种方法,不过只能用来出来特定部件的特定事件。(2).......
  • 多方安全计算Secure Multi-Party Computation(SMPC)学习笔记
    引言随着数字化时代的到来,数据的价值变得前所未有的重要。然而,随之而来的是对数据隐私和安全的日益关注。个人和组织都希望能够利用敏感数据进行有益的分析和合作,但又不希望将这些数据暴露给其他人。在这种情况下,安全多方计算(SMPC)崭露头角。SMPC是一种创新的加密技术,它允许多个参与......
  • django 计算两个TimeField的时差
    在Django中,你可以使用datetime模块来计算两个TimeField字段的时间差。以下是一个示例:fromdatetimeimportdatetime,timedelta#假设有两个TimeField字段time1=obj.time_field1time2=obj.time_field2#将时间字段转换为datetime对象datetime1=datetime......
  • qt 操作添加快捷键
    1QShortcut*backwardShortcut=newQShortcut(QKeySequence::Copy,this);2connect(backwardShortcut,SIGNAL(activated()),this,SLOT(slot_action_screenshotTriggered()));这是给截图操作添加了ctrl+c快捷键放到剪贴板voidslot_action_screenshotTrigger......
  • 计算两个经纬度坐标之间的距离值
    importjava.util.*;importjava.math.*;/***计算两个经纬度坐标之间的距离值*src:https://blog.csdn.net/zhuxiaoping54532/article/details/53671641*/publicclasstest1{privatefinalstaticdoubleEARTH_RADIUS=6378.137;publicstaticvoidm......
  • IDL计算莫兰指数
    莫兰指数(Moran'sI)是一种用于空间自相关分析的统计指标,用于衡量空间数据的聚集程度。它可以用来确定数据是否呈现出空间集聚(正相关)或空间离散(负相关)的模式。IDL(InteractiveDataLanguage)是一种科学数据分析和可视化编程语言。要在IDL中计算莫兰指数,可以使用MORAN函数。该函数需要......
  • 计算机网络--Ch6.应用层(二)
    三.文件传输协议FTP1.FTP文件传送协议FTP(FileTransferProtocol.)提供不同种类主机系统(硬、软件体系等都可以不同)之间的文件传输能力。简单文件传送协议TFTP(TrivialFileTransferProtocol)2.FTP服务器和用户端FTP是基于客户/服务器(C/S)的协议。用户通过一个客户机程序连......