class QMessageAuthenticationCode#

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

摘要#

方法#

静态函数#

注意

本文档可能包含从 C++ 自动翻译到 Python 的代码片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译存在问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建票据来通知我们

详细描述#

警告

本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。

使用 QMessageAuthenticationCode 类可以生成基于散列的消息认证码(HMAC)。该类支持 QCryptographicHash 中的所有加密散列算法(另请参阅 Algorithm )。

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

key = "key"
message = "The quick brown fox jumps over the lazy dog"            ...

code = QMessageAuthenticationCode(QCryptographicHash.Sha256, key)
code.addData(message)
code.result().toHex() # returns "f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8"

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

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

注意

HMAC 的加密强度取决于密钥的大小以及底层哈希函数的安全性。

__init__(method[, key={}])#
参数:
  • methodAlgorithm

  • keyQByteArrayView

使用方法 method 和密钥 key 创建一个用于从数据中生成加密哈希的对象。

注意

在Qt 6.6之前的版本中,此函数将参数视为 QByteArray ,而不是 QByteArrayView 。如果您遇到编译错误,那是因为您的代码传递了可以隐式转换为 QByteArray 但不是 QByteArrayView 的对象。在相应的参数上使用 QByteArray{~~~} 使转换显式。这是向后兼容旧Qt版本的。

addData(data)#
参数:

dataQByteArrayView

data 添加到消息中。

注意

在Qt 6.6之前的版本中,此函数将参数视为 QByteArray ,而不是 QByteArrayView 。如果您遇到编译错误,那是因为您的代码传递了可以隐式转换为 QByteArray 但不是 QByteArrayView 的对象。在相应的参数上使用 QByteArray{~~~} 使转换显式。这是向后兼容旧Qt版本的。

另请参阅

resultView() result()

addData(device)
参数:

deviceQIODevice

返回类型::

bool

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

注意

device 必须已经打开。

addData(data, length)
参数:
  • data – str

  • length – int

这是一个重载函数。

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

static hash(message, key, method)#
参数:
  • messageQByteArrayView

  • keyQByteArrayView

  • methodAlgorithm

返回类型::

QByteArray

使用密钥 key 和方法 method 为消息 message 返回身份验证代码。

注意

在Qt 6.6之前的版本中,此函数将参数视为 QByteArray ,而不是 QByteArrayView 。如果您遇到编译错误,那是因为您的代码传递了可以隐式转换为 QByteArray 但不是 QByteArrayView 的对象。在相应的参数上使用 QByteArray{~~~} 使转换显式。这是向后兼容旧Qt版本的。

reset()#

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

result()#
返回类型::

QByteArray

返回最终的认证代码。

另请参阅

resultView() toHex()

resultView()#
返回类型::

QByteArrayView

返回最终的哈希值。

注意,返回的视图仅在QMessageAuthenticationCode对象未被其他方式修改的情况下保持有效。

另请参阅

result()

setKey(key)#
参数:

keyQByteArrayView

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

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

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);

注意

在Qt 6.6之前的版本中,此函数将参数视为 QByteArray ,而不是 QByteArrayView 。如果您遇到编译错误,那是因为您的代码传递了可以隐式转换为 QByteArray 但不是 QByteArrayView 的对象。在相应的参数上使用 QByteArray{~~~} 使转换显式。这是向后兼容旧Qt版本的。

swap(other)#
参数:

otherQMessageAuthenticationCode

与当前的消息认证代码交换other。此操作非常快且永远不会失败。