Question

J'utilise le bibliothèque NTL pour mettre en œuvre l'algorithme de chiffrement / déchiffrement ElGamal. Je l'ai il arrivé au point qu'il fonctionne, mais l'algorithme veut que le message soit converti en entiers de sorte qu'il peut être crypté.
Donc, si je entrer un numéro comme 1234 tout fonctionne ok mais comment je vais pouvoir convertir un C ++ string (std :: string) à un numéro de ZZ, puis de nouveau à partir de ce numéro de ZZ à une chaîne?

LE :

ZZ il est une classe qui représente un grand nombre.
Ex: 18287348238476283658234881728316274273671623781254124517353

Donc, fondamentalement, je cherche à prendre « Bonjour tout le monde », par exemple et exécuter carboniser par char et obtenir le code ascii des caractères, donc je vais obtenir un numéro: « 101 108 108 72 111 32 111 87 114 108 100"
Et puis je dois convertir ce chiffre à chaîne « Bonjour tout le monde »

Ou peut-être il y a une meilleure façon.

Était-ce utile?

La solution

Voici un moyen facile de le faire:

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

Maintenant, remarquez que:

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

Autres conseils

Voici une réponse sur le site de l'auteur NTL:

  

En plus des conversions cotées en bourse, il y a une conversion générique   à partir d'un C-strings (à savoir, const char *) pour tout type T, qui est   mis en œuvre à l'aide des modèles en utilisant l'opérateur d'entrée >> pour le type T.   Ainsi, par exemple, vous pouvez écrire

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

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

Je l'ai essayé, et cela a fonctionné parfaitement.

De loin la solution la plus simple est de réaliser que vous pouvez convertir chars à unsigned ints et unsigned ints à ZZ numéros. Ensuite, traiter la chaîne comme un numéro de base 256. Par exemple, "abc" serait 256 * "ab" + "c", ou 65536 * "a" + 256 * "b" + "c", ou ((ZZ(unsigned('a')*256) + ZZ(unsigned('b'))*256) + ZZ(unsigned('c')),

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top