QMessageAuthenticationCode 类

QMessageAuthenticationCode 类提供了一种生成基于哈希的消息认证码 (HMAC)。更多...

头文件 #include <QMessageAuthenticationCode>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

注意: 此类中的所有函数都是重入的。

公共函数

QMessageAuthenticationCode(QCryptographicHash::Algorithm method, QByteArrayView key = {})
(自 6.6) QMessageAuthenticationCode(QMessageAuthenticationCode &&other)
~QMessageAuthenticationCode()
voidaddData(QByteArrayView data)
voidaddData(const char *data, qsizetype length)
booladdData(QIODevice *device)
voidreset()
QByteArrayresult() const
(since 6.6) QByteArrayViewresultView() const
voidsetKey(QByteArrayView key)
(since 6.6) voidswap(QMessageAuthenticationCode &other)
(since 6.6) QMessageAuthenticationCode &operator=(QMessageAuthenticationCode &&other)

静态公共成员

QByteArrayhash(QByteArrayView message, QByteArrayView key, QCryptographicHash::Algorithm method)

详细描述

使用 QMessageAuthenticationCode 类来生成基于哈希的消息认证码 (HMAC)。该类支持来自《QCryptographicHash》的所有加密哈希算法(见QCryptographicHash::Algorithm)。

要生成消息认证码,请将合适的哈希算法和密钥传递给构造函数。然后通过多次调用 addData() 处理消息数据。在处理完完整消息后,通过 result() 函数获取最终的认证码

    QByteArray key = "key";
    QByteArray message = "The quick brown fox jumps over the lazy dog";
    ...
    QMessageAuthenticationCode code(QCryptographicHash::Sha256, key);
    code.addData(message);
    code.result().toHex(); // returns "f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8"

对于像上面这样的简单情况,您也可以使用静态的 hash() 函数

    QMessageAuthenticationCode::hash(message, key, QCryptographicHash::Sha256).toHex();

注意: HMAC 的加密强度取决于密钥的大小和底层哈希函数的安全性。

另请参阅:QCryptographicHash 和《QCryptographicHash::Algorithm》。

成员函数文档

[明确解释] QMessageAuthenticationCode::QMessageAuthenticationCode(QCryptographicHash::Algorithm method, QByteArrayView key = {})

创建一个可以使用方法 method 和密钥 key 从数据生成加密散列的对象。

注意: 在 6.6 版本之前的 Qt 中,此函数以 QByteArray 作为参数,而不是 QByteArrayView。如果您遇到编译错误,那是因为您的代码正在传递可以隐式转换为 QByteArray 但不是 QByteArrayView 的对象。请在相应的参数周围添加 QByteArray{~~~} 以使类型转换明确。这与旧版本的 Qt 兼容。

[noexcept, since 6.6] QMessageAuthenticationCode::QMessageAuthenticationCode(QMessageAuthenticationCode &&other)

other 构造新的 QMessageAuthenticationCode。

注意: 被移动的对象 other 被置于一个部分构造状态,其中唯一有效操作是销毁和为新对象赋值。

此函数在 Qt 6.6 中引入。

[noexcept] QMessageAuthenticationCode::~QMessageAuthenticationCode()

销毁对象。

[noexcept] void QMessageAuthenticationCode::addData(QByteArrayView data)

data 添加到消息中。

注意: 在 6.6 版本之前的 Qt 中,此函数以 QByteArray 作为参数,而不是 QByteArrayView。如果您遇到编译错误,那是因为您的代码正在传递可以隐式转换为 QByteArray 但不是 QByteArrayView 的对象。请在相应的参数周围添加 QByteArray{~~~} 以使类型转换明确。这与旧版本的 Qt 兼容。

另请参阅: resultView() 和 result()。

void QMessageAuthenticationCode::addData(const char *data, qsizetype length)

这是一个重载函数。

data 的前 length 个字符添加到消息中。

bool QMessageAuthenticationCode::addData(QIODevice *device)

从打开的 QIODevice device 读取数据,直到结束,并将其添加到消息中。如果读取成功,则返回 true

注意: device 必须已经打开。

[静态] QByteArray QMessageAuthenticationCode::hash(QByteArrayView message, QByteArrayView key, QCryptographicHash::Algorithm method)

使用 keymethod 为消息 message 返回身份验证代码。

注意: 在 6.6 版本之前的 Qt 中,此函数以 QByteArray 作为参数,而不是 QByteArrayView。如果您遇到编译错误,那是因为您的代码正在传递可以隐式转换为 QByteArray 但不是 QByteArrayView 的对象。请在相应的参数周围添加 QByteArray{~~~} 以使类型转换明确。这与旧版本的 Qt 兼容。

[noexcept] void QMessageAuthenticationCode::reset()

重置消息数据。调用此函数不会影响密钥。

QByteArray QMessageAuthenticationCode::result() const

返回最终的认证代码。

另请参阅 resultView() 和 QByteArray::toHex

[异常安全,自 6.6 开始] QByteArrayView QMessageAuthenticationCode::resultView() const

返回最终的哈希值。

请注意,返回的视图仅在QMessageAuthenticationCode对象未被其他方式修改时有效。

此函数在 Qt 6.6 中引入。

另请参阅 result

[异常安全,自 6.6 开始] void QMessageAuthenticationCode::setKey(QByteArrayView key)

设置密钥。调用此函数将自动重置对象状态。

为了最佳性能,请仅在使用更改活动密钥时调用此函数,而不是设置初始密钥,如下所示

QMessageAuthenticationCode mac(method);
mac.setKey(key); // does extra work
use(mac);

最好将初始密钥作为构造函数参数传递

QMessageAuthenticationCode mac(method, key); // OK, optimal
use(mac);

您可以使用 std::optional 在知道密钥之前延迟构建QMessageAuthenticationCode

std::optional<QMessageAuthenticationCode> mac;
~~~
key = ~~~;
mac.emplace(method, key);
use(*mac);

注意: 在 6.6 版本之前的 Qt 中,此函数以 QByteArray 作为参数,而不是 QByteArrayView。如果您遇到编译错误,那是因为您的代码正在传递可以隐式转换为 QByteArray 但不是 QByteArrayView 的对象。请在相应的参数周围添加 QByteArray{~~~} 以使类型转换明确。这与旧版本的 Qt 兼容。

[异常安全,自 6.6 开始] void QMessageAuthenticationCode::swap(QMessageAuthenticationCode &other)

将消息认证代码other与此消息认证代码交换。此操作非常快且决不会失败。

此函数在 Qt 6.6 中引入。

[异常安全,自 6.6 开始] QMessageAuthenticationCode &QMessageAuthenticationCode::operator=(QMessageAuthenticationCode &&other)

other移动分配给此QMessageAuthenticationCode实例。

注意: 被移动的对象 other 被置于一个部分构造状态,其中唯一有效操作是销毁和为新对象赋值。

此函数在 Qt 6.6 中引入。

© 2024 Qt公司。以下内容的文档贡献者是各自的所有权。本提供的文档是根据由自由软件基金会发布的GNU自由文档许可协议版本1.3许可的。Qt及其相关标志是芬兰和/或全世界Qt公司的商标。所有其他商标均为其各自所有者的财产。