【问题标题】:how can I generate a SHA-1 byte array from a GUID in C++如何从 C++ 中的 GUID 生成 SHA-1 字节数组
【发布时间】:2018-11-08 08:48:05
【问题描述】:

我在 windows 中使用函数并生成 SHA-1 哈希。

这是我正在使用的函数的一部分,它不是整个函数,但该函数返回一个 GUID。

GUID guid;

res = CryptGetHashParam(hHash, HP_HASHVAL, (BYTE*)&guid, &dwHashLen, 0);

我很确定它可以工作,但我需要对它进行单元测试,因为它在我们代码库的一个非常危险的部分中。

我希望能够做的是 找到一些散列到 GUID 的样本字符串的测试向量 要不然 找到一种将 GUID 转换为字符串的方法。

我使用的测试数据取自网站https://www.di-mgt.com.au/sha_testvectors.html

所以

使用 SHA-1 对字符串“abc”进行散列应该会产生 a9993e36 4706816a ba3e2571 7850c26c 9cd0d89d 散列字符串 abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq 应该产生 84983e44 1c3bd26e baae4aa1 f95129e5 e54670f1

【问题讨论】:

  • 为什么你认为你得到的是 GUID 而不是二进制数据?
  • 你也应该发布相关的源代码和输出
  • SHA-1 不是加密,它是散列。另外,您使用的是deprecated CryptCreateHash 还是CNG functions?显示一些代码。

标签: c++ windows guid sha1


【解决方案1】:

为什么不使用将时间戳作为输入的标准 GUID 生成函数。事实上时间戳是最好的 GUID。

【讨论】:

  • 我正在寻找一些测试数据来证明我的代码工作正常。我知道 abc 的 SHA-1 是“a9993e36 4706816a ba3e2571 7850c26c 9cd0d89d”,但是我在 WinCrypt.h 中使用的函数返回一个 GUID,所以我怎么知道这个 GUID 是正确的。
【解决方案2】:

事实证明,您不能将 SHA-1 摘要表示为 GUID,因为 SHA-1 摘要的大小与 GUID 不同。 我犯了一个愚蠢的错误。

【讨论】:

    猜你喜欢
    • 2013-08-24
    • 2010-12-03
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2010-12-25
    • 2019-09-24
    • 1970-01-01
    相关资源
    最近更新 更多