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.

War es hilfreich?

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 chars zu unsigned ints und unsigned ints 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')),

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top