mirror of
https://github.com/Blinue/Magpie.git
synced 2026-06-24 02:04:10 +00:00
fix: 哈希算法始终复用句柄
从 win8 开始支持
This commit is contained in:
parent
53c8924795
commit
f5e089c808
2 changed files with 5 additions and 21 deletions
|
|
@ -194,7 +194,7 @@ Utils::Hasher::~Hasher() {
|
|||
if (_hashObj) {
|
||||
HeapFree(GetProcessHeap(), 0, _hashObj);
|
||||
}
|
||||
if (_supportReuse && _hHash) {
|
||||
if (_hHash) {
|
||||
BCryptDestroyHash(_hHash);
|
||||
}
|
||||
}
|
||||
|
|
@ -227,10 +227,9 @@ bool Utils::Hasher::Initialize() {
|
|||
}
|
||||
|
||||
status = BCryptCreateHash(_hAlg, &_hHash, (PUCHAR)_hashObj, _hashObjLen, NULL, 0, BCRYPT_HASH_REUSABLE_FLAG);
|
||||
if (NT_SUCCESS(status)) {
|
||||
_supportReuse = true;
|
||||
} else {
|
||||
SPDLOG_LOGGER_WARN(logger, fmt::format("BCryptCreateHash 失败:当前设备不支持 BCRYPT_HASH_REUSABLE_FLAG\n\tNTSTATUS={}", status));
|
||||
if (!NT_SUCCESS(status)) {
|
||||
SPDLOG_LOGGER_ERROR(logger, fmt::format("BCryptCreateHash 失败\n\tNTSTATUS={}", status));
|
||||
return false;
|
||||
}
|
||||
|
||||
SPDLOG_LOGGER_INFO(logger, "Utils::Hasher 初始化成功");
|
||||
|
|
@ -240,17 +239,7 @@ bool Utils::Hasher::Initialize() {
|
|||
bool Utils::Hasher::Hash(void* data, size_t len, std::vector<BYTE>& result) {
|
||||
result.resize(_hashLen);
|
||||
|
||||
NTSTATUS status;
|
||||
|
||||
if (!_supportReuse) {
|
||||
status = BCryptCreateHash(_hAlg, &_hHash, (PUCHAR)_hashObj, _hashObjLen, NULL, 0, BCRYPT_HASH_REUSABLE_FLAG);
|
||||
if (!NT_SUCCESS(status)) {
|
||||
SPDLOG_LOGGER_ERROR(logger, fmt::format("BCryptCreateHash 失败\n\tNTSTATUS={}", status));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
status = BCryptHashData(_hHash, (PUCHAR)data, (ULONG)len, 0);
|
||||
NTSTATUS status = BCryptHashData(_hHash, (PUCHAR)data, (ULONG)len, 0);
|
||||
if (!NT_SUCCESS(status)) {
|
||||
SPDLOG_LOGGER_ERROR(logger, fmt::format("BCryptCreateHash 失败\n\tNTSTATUS={}", status));
|
||||
return false;
|
||||
|
|
@ -262,10 +251,6 @@ bool Utils::Hasher::Hash(void* data, size_t len, std::vector<BYTE>& result) {
|
|||
return false;
|
||||
}
|
||||
|
||||
if (!_supportReuse) {
|
||||
BCryptDestroyHash(_hHash);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -101,7 +101,6 @@ struct Utils {
|
|||
void* _hashObj = nullptr; // 存储 hash 对象
|
||||
DWORD _hashLen = 0; // 哈希结果的大小
|
||||
BCRYPT_HASH_HANDLE _hHash = NULL;
|
||||
bool _supportReuse = false;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue