gpt4 book ai didi

C++ 将十六进制 md5 哈希转换为十进制整数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:48 26 4
gpt4 key购买 nike

我正在执行 Elgamal 签名方案,我需要使用消息中的十进制哈希值来计算 S 以生成签名。十六进制哈希的示例是:

820dbb4256a4287557ade2f729d279f1

如上所示,哈希值是一个 32 位的十六进制数。我需要将上面的字符串转换为十进制整数,以便稍后计算。

    string hash = md5(message);
cout << hash << endl;
NTL::ZZ msgHash = strtol(hash.c_str(), NULL, 16);
cout << msgHash << endl;

没有足够大的整数来包含 32 字节十六进制哈希的值,所以我尝试了 NTL 库中的大整数,但它没有成功,因为你不能分配从 strtol 函数返回的长整数(而且我认为十进制哈希值比长整数范围限制长得多)到 NTL::ZZ 类型。这个有什么好的解决办法吗?

我在 Visual Studio 2013 中使用 Visual C++ 执行此操作。

最佳答案

MD5 的结果是一个八位字节串(或字节数组)。十六进制值应该只用于表示二进制值。您需要将十六进制字符串转换回字节。这是由大量库中的十六进制解码器执行的。

然后需要将字节数组转换回多精度整数。为此you need a libary .在加密(通常基于群论)中,将字节解释为无符号、大端(MSB 优先)编码整数可能是有意义的。

如果需要执行任何额外的与密码相关的计算,那么最好使用密码库,如 OpenSSL (C)、Crypto++ 或 Bothan (C++)。这些库已经包含处理大(无符号)数字和一般十六进制编解码器的方法。

关于C++ 将十六进制 md5 哈希转换为十进制整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24024662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com