Domanda

Sto utilizzando il NTL biblioteca di implementare l'algoritmo di cifratura / decifratura ElGamal. Ho capito al punto che sta funzionando ma l'algoritmo vuole che il messaggio venga convertito in numeri interi in modo che possa essere criptato.
Quindi, se ho in ingresso un numero come 1234 tutto funziona ok, ma come dovrei fare per essere in grado di convertire una stringa C ++ (std :: string) per un numero ZZ e poi di nuovo da quel numero ZZ in una stringa?

LE :

ZZ è una classe che rappresentano un gran numero.
Es: 18287348238476283658234881728316274273671623781254124517353

Quindi, fondamentalmente sto cercando di prendere "Ciao Mondo", per esempio ed eseguirlo char da char e ottenere il codice ASCII del caratteri in modo che io prendo un numero: "101 108 108 72 111 32 87 111 114 108 100"
E poi ho bisogno di convertire questo numero torna a stringa "Ciao Mondo"

O forse c'è un modo migliore.

È stato utile?

Soluzione

Ecco un modo semplice per farlo:

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

Ora notare che:

std::cout << str << std::endl; // prints 1234567890
std::cout << number << std::endl; // prints 1234567890

Altri suggerimenti

Ecco una risposta dal sito dell'autore NTL:

  

Oltre alle conversioni elencati, v'è una conversione generico   da un C-stringhe (cioè, const char *) a qualsiasi tipo T, che è   implementato utilizzando i modelli utilizzando l'operatore di input >> per il tipo T.   Così, per esempio, è possibile scrivere

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

Fonte: http://www.shoup.net/ntl/doc/conversions .txt

ho provato, e ha funzionato perfettamente.

Di gran lunga la soluzione più semplice è quella di rendersi conto che è possibile convertire chars a unsigned ints, e unsigned ints a ZZ numeri. Poi trattare la stringa come numero base-256. Ad esempio, "abc" sarebbe 256 * "ab" + "c", o 65536 * "a" + 256 * "b" + "c", o ((ZZ(unsigned('a')*256) + ZZ(unsigned('b'))*256) + ZZ(unsigned('c')),

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top