题
我使用的 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
我尝试了,它完美地工作。
目前最简单的解决方法就是了解,你可以向char
s unsigned int
s,并unsigned int
s转换为数字ZZ
。然后把字符串作为基础-256号。例如, “ABC” 将是256 * “AB” + “C”,或65536 * “一” + 256 * “B” + “C”,或((ZZ(unsigned('a')*256) + ZZ(unsigned('b'))*256) + ZZ(unsigned('c'))
,