我正在进行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++进行此操作。
strtol
从您的hash
字符串中提取整数值,则该值肯定适合于一个整数...因此,您可能需要解释“没有足够大的整数来容纳32位十六进制哈希值”的说法。 - barak manos