Wie kann ich einen String in eine ZZ Zahl umwandeln?
Frage
Ich bin mit der NTL Bibliothek implementieren ElGamal Verschlüsselung / Entschlüsselung Algorithmus.
Ich habe es zu dem Punkt, dass es funktioniert, aber der Algorithmus will die Nachricht auf ganze Zahlen umgewandelt werden, damit sie verschlüsselt werden kann.
Also, wenn ich Eingabe eine Zahl wie 1234 alles funktioniert ok, aber wie würde ich mich in der Lage sein eine C ++ string (std :: string) in eine ZZ Zahl zu konvertieren und dann wieder von dieser ZZ Zahl in einen String?
LE :
ZZ es ist eine Klasse, die eine große Zahl darstellen.
Ex: 18287348238476283658234881728316274273671623781254124517353
Also im Grunde suche ich „Hallo Welt“ zum Beispiel zu nehmen und führen Sie es durch char char und den ASCII-Code der Zeichen zu bekommen, so dass ich eine Nummer bekommen: „72 101 108 108 111 32 87 111 114 108 100"
Und dann muss ich diese Nummer wieder auf Zeichenfolge „Hallo Welt“ konvertieren
Vielleicht gibt es einen besseren Weg.
Lösung
Hier ist eine einfache Möglichkeit, es zu tun:
std::string str("1234567890");
NTL::ZZ number(NTL::INIT_VAL, str.c_str());
Beachten Sie, dass:
std::cout << str << std::endl; // prints 1234567890
std::cout << number << std::endl; // prints 1234567890
Andere Tipps
Hier ist eine Antwort von der Website des NTL Autor:
Neben den genannten Umwandlungen, gibt es eine allgemeine Umwandlung von a C-strings (d.h. const char *) auf jeden Typ T, das ist mit Hilfe von Vorlagen mit Hilfe des Eingabeoperators >> für Typen T implementiert So zum Beispiel können Sie schreiben
ZZ x = conv<ZZ>("99999999999999999999999");
Quelle: http://www.shoup.net/ntl/doc/conversions .txt
Ich versuchte es, und es funktionierte perfekt.
Bei weitem die einfachste Lösung ist zu erkennen, dass Sie char
s zu unsigned int
s und unsigned int
s zu ZZ
Zahlen umwandeln kann. Dann behandeln Sie die Zeichenfolge als Basis-256-Nummer. Zum Beispiel: "abc" wäre 256 * "ab" + "c" oder 65536 * "a" + 256 * "b" + "c" oder ((ZZ(unsigned('a')*256) + ZZ(unsigned('b'))*256) + ZZ(unsigned('c'))
,