我正在使用NTL library来实现ElGamal加密/解密算法。
我已经知道它正在工作,但算法希望将消息转换为整数,以便加密。
所以,如果我输入一个像1234这样的数字,一切正常,但我怎样才能将C ++字符串(std :: string)转换为ZZ编号,然后从该ZZ编号转换为字符串?
LE :
ZZ这是一个代表大量的类 例如:18287348238476283658234881728316274273671623781254124517353
所以基本上我想以“Hello World”为例,然后用char运行char并得到字符的ascii代码,这样我就得到一个数字:“72 101 108 108 111 32 87 111 114 108 100"
然后我需要将此数字转换回字符串“Hello World”
或许还有更好的方法。
答案 0 :(得分:3)
以下是NTL作者网站的回答:
除了列出的转化,还有一般转换 从 C-strings (即const char *)到任何类型T,即 使用输入运算符>>使用模板实现对于类型T. 所以,例如,你可以写
ZZ x = conv<ZZ>("99999999999999999999999");
来源:http://www.shoup.net/ntl/doc/conversions.txt
我试过了,它运作得很好。
答案 1 :(得分: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
答案 2 :(得分:0)
到目前为止,最简单的解决方案是意识到您可以将char
转换为unsigned int
s,将unsigned int
转换为ZZ
个数字。然后将字符串视为base-256数字。例如,“abc”将为256 *“ab”+“c”,或65536 *“a”+ 256 *“b”+“c”,或((ZZ(unsigned('a')*256) + ZZ(unsigned('b'))*256) + ZZ(unsigned('c'))
,