Comment puis-je convertir une chaîne en un numéro de ZZ?
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.
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 char
s à unsigned int
s et unsigned int
s à 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'))
,