2010-01-22 2 views
1

Я использую NTL library для реализации алгоритма шифрования/дешифрования ElGamal. У меня получилось, что он работает, но алгоритм хочет, чтобы сообщение было преобразовано в целые числа, чтобы его можно было зашифровать.
Итак, если я ввожу число, подобное 1234, все работает нормально, но как бы я смог преобразовать строку C++ (std :: string) в ZZ-номер, а затем обратно с этого номера ZZ в строку?Как преобразовать строку в ZZ-номер?

LE:

ZZ это класс, который представляет большое количество.
Ex: 18287348238476283658234881728316274273671623781254124517353

Поэтому в основном я ищу, чтобы принять «Hello World», например, и запустить его обугливается на гольца и получить ASCII код из символов, так что я получу номер: «72 101 108 108 111 32 87 111 114 108 100 "
И тогда мне нужно преобразовать это число обратно в строку« Hello World »

Или, может быть, есть лучший способ.

+1

что такое число ZZ? Честно говоря, я попробовал Google не найти его – Xinus

+1

'ZZ' - это целочисленный класс бесконечной точности NTL. – MSalters

ответ

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 
0

До сих пор самым простым решением является понять, что вы можете конвертировать char с до unsigned int с, и unsigned int с до ZZ чисел. Затем обработайте строку как номер базы 256. Например, «abc» будет 256 * «ab» + «c», или 65536 * «a» + 256 * «b» + «c», или ((ZZ(unsigned('a')*256) + ZZ(unsigned('b'))*256) + ZZ(unsigned('c')),

+0

, а на другом конце, когда у меня есть номер, как преобразовать его обратно в строку? – daniels

+1

iterate 'nextchar = val% 256; val = val/256;' до val равно 0. Это, по общему признанию, строит строку назад, но это всего лишь случай обращения вспять строки. – Vatine

+0

Истина - вы можете выбрать один раз, хотите ли вы, чтобы вы имели дело с little-endian или big-endian, другое преобразование просто должно соответствовать этому. Оба аспекта одинаково важны, и имеет смысл соответствовать вашему соглашению с платформой. – MSalters

Смежные вопросы