1

我正在使用NTL 库来实现 ElGamal 加密/解密算法。我已经知道它正在工作,但算法希望将消息转换为整数,以便对其进行加密。
因此,如果我输入一个像 1234 这样的数字,一切正常,但是我将如何能够将 C++ 字符串(std::string)转换为 ZZ 数字,然后从该 ZZ 数字转换回字符串?

ZZ 它是一个代表大量数字的类。
例如:18287348238476283658234881728316274273671623781254124517353

所以基本上我希望以“Hello World”为例,逐个字符地运行它并获取字符的ascii代码,所以我会得到一个数字:“72 101 108 108 111 32 87 111 114 108 100”
并且然后我需要将此数字转换回字符串“Hello World”

或者也许有更好的方法。

4

3 回答 3

3

这是来自 NTL 作者网站的答案:

除了列出的转换之外,还有从C 字符串(即 const char *)到任何类型 T 的通用转换,这是使用模板实现的,使用输入运算符 >> 用于类型 T。因此,例如,您会写

    ZZ x = conv<ZZ>("99999999999999999999999");

来源:http ://www.shoup.net/ntl/doc/conversions.txt

我试过了,效果很好。

于 2018-03-14T11:48:09.333 回答
2

这是一个简单的方法:

std::string str("1234567890");
NTL::ZZ number(NTL::INIT_VAL, str.c_str());

现在请注意:

std::cout << str << std::endl; // prints 1234567890
std::cout << number << std::endl; // prints 1234567890
于 2013-08-26T14:58:39.800 回答
0

到目前为止,最简单的解决方案是意识到您可以将chars 转换为unsigned ints,并将unsigned ints 转换为ZZ数字。然后将字符串视为 base-256 数字。例如,“abc”将是 256*“ab”+“c”,或 65536 *“a”+256 *“b”+“c”,或者((ZZ(unsigned('a')*256) + ZZ(unsigned('b'))*256) + ZZ(unsigned('c'))

于 2010-01-22T13:36:41.380 回答