QMessageAuthenticationCode 类
QMessageAuthenticationCode 类提供了一种生成基于哈希的消息认证码 (HMAC)。更多...
头文件 | #include <QMessageAuthenticationCode> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
注意: 此类中的所有函数都是重入的。
公共函数
QMessageAuthenticationCode(QCryptographicHash::Algorithm method, QByteArrayView key = {}) | |
(自 6.6) | QMessageAuthenticationCode(QMessageAuthenticationCode &&other) |
~QMessageAuthenticationCode() | |
void | addData(QByteArrayView data) |
void | addData(const char *data, qsizetype length) |
bool | addData(QIODevice *device) |
void | reset() |
QByteArray | result() const |
(since 6.6) QByteArrayView | resultView() const |
void | setKey(QByteArrayView key) |
(since 6.6) void | swap(QMessageAuthenticationCode &other) |
(since 6.6) QMessageAuthenticationCode & | operator=(QMessageAuthenticationCode &&other) |
静态公共成员
QByteArray | hash(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)
使用 key 和 method 为消息 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公司的商标。所有其他商标均为其各自所有者的财产。