我使用的 NTL库来实现ElGamal加密/解密算法。 我也得到了它的工作,但该算法希望消息被转换为整数,因此它可以被加密的地步。结果 所以,如果我输入1234一切作品数量确定,但如何将我去能够将C ++字符串(的std :: string)转换为ZZ号,然后从ZZ数回字符串?

<强> LE

ZZ它是表示大量的类。结果 例如:18287348238476283658234881728316274273671623781254124517353

因此,基本上我期待采取的“Hello World”,例如,并运行它由炭烧焦并得到字符的ASCII码,所以我会得到一个号码:“72 101 108 108 111 32 87 111 114 108 100" 结果 然后我需要转换这个号码回字符串“Hello World”

或者,也许有一个更好的办法。

有帮助吗?

解决方案

下面是一个简单的方法来做到这一点:

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

其他提示

下面是从NTL作者的网站答案:

  

在除了列出的转化,有一种通用的转化   从一个的 C字符串(即,为const char *)于任何类型的T,这是   通过使用输入操作符>>用于T类型的模板实现   因此,举例来说,你可以写

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

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

我尝试了,它完美地工作。

目前最简单的解决方法就是了解,你可以向chars unsigned ints,并unsigned ints转换为数字ZZ。然后把字符串作为基础-256号。例如, “ABC” 将是256 * “AB” + “C”,或65536 * “一” + 256 * “B” + “C”,或((ZZ(unsigned('a')*256) + ZZ(unsigned('b'))*256) + ZZ(unsigned('c'))

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top