Pergunta

Estou usando o Biblioteca NTL Para implementar o algoritmo de criptografia/descriptografia elgamal. Eu tenho a ponto de estar funcionando, mas o algoritmo deseja que a mensagem seja convertida em números inteiros para que possa ser criptografada.
Então, se eu inserir um número como 1234, tudo funciona bem, mas como eu seria capaz de converter uma string c ++ (std :: string) em um número ZZ e depois voltar desse número ZZ para uma string?

Le:

ZZ É uma classe que representa um grande número.
Ex: 18287348238476283658234881728316274273671623781254124517353

Então, basicamente, estou procurando pegar "Hello World", por exemplo, e executá -lo char por char e obter o código ASCII dos chars, para obter um número: "72 101 108 108 111 32 87 111 114 108 100"
E então eu preciso converter esse número de volta para a string "Hello World"

Ou talvez exista uma maneira melhor.

Foi útil?

Solução

Aqui está uma maneira fácil de fazer isso:

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

Agora observe que:

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

Outras dicas

Aqui está uma resposta do site do autor da NTL:

Além das conversões listadas, há uma conversão genérica de um Strings c (ou seja, const char *) para qualquer tipo T, que é implementado usando modelos usando o operador de entrada >> para o tipo T. Então, por exemplo, você pode escrever

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

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

Eu tentei e funcionou perfeitamente.

De longe, a solução mais fácil é perceber que você pode converter chars para unsigned intareia unsigned ints para ZZ números. Em seguida, trate a string como um número de base 256. Por exemplo, "abc" seria 256 * "ab" + "c" ou 65536 * "a" + 256 * "b" + "c", ou ((ZZ(unsigned('a')*256) + ZZ(unsigned('b'))*256) + ZZ(unsigned('c')),

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top