Pergunta

Dada uma "string filename", como posso obter a soma de verificação Adler32 usando a biblioteca C ++ Crypto ++. Estou um pouco confuso sobre o uso de seu sistema de fonte e dreno.

Abaixo eu tenho o esqueleto do código que faz MD5, mas eu não consigo encontrar qualquer exemplos ou tutoriais sobre o uso Adler32.

string filename = "/tmp/data.txt"
string file_adler32_digest;
string file_md5_digest;

MD5 hashMD5;

FileSource fs( filename.c_str(), 
              true, 
              new HashFilter( hashMD5, 
              new HexEncoder( new StringSink( file_md5_digest ) ) ) );

/* Confusion begins here */   

//how do I do the adler32 ?

/* Confusion ends here */

cout << file_adler32_digest << endl
     << file_md5_digest << endl;

Boa amostras e código de exemplo aqui http://www.cryptopp.com/wiki/Category : Amostra para toda a Crypto ++ (exceto para o material Adler32 eu quero)

Foi útil?

Solução

Se você seguir este http://www.cryptopp.com/wiki/HashFilter , você tem que mudar hashMD5 para hashAdler32 e file_md5_digest para file_adler32_digest

Adler32 hashAdler32;

FileSource( filename.c_str(), 
            true, 
            new HashFilter( hashAdler32, 
            new HexEncoder( new StringSink( file_adler32_digest ) ) ) );

Após este file_adler32_digest deve conter o hash desejado.

Outras dicas

.. um pouco confuso sobre o uso de seu sistema de fonte e dreno.

OK. Esse projeto particular é inspirado no sistema de tubulação do Unix. Se você entender tubos Unix e como doata flui através dele, então você entende o Crypto ++ Pipeline.

Por exemplo, a seguinte comandos Unix:

cat somefile.bin | hexdump

viria a ser o seguinte programa Crypto ++:

FileSource fs("somefile.bin", true /*pumpAll*/, new HexEncoder(new FileSink(cout)));

Eu tenho o esqueleto do código que faz MD5, mas eu preciso o código ... para Adler32 ...

Como Ismael mostrou que você, é tão simples como:

Adler32 adler32;
string digest;

FileSource fs(filename.c_str(),  true /*pumpAll*/, 
              new HashFilter(adler32, 
                    new HexEncoder(
                        new StringSink(digest))));

Mas aqui está o insight: Em Crypto ++, fluxos de dados de Fontes para Sinks . No meio, ele irá encontrar Filtros que transformar os dados.

Acima, você tem dois filtros: o HashFilter e HexEncoder . Todos os filtros herdar de um BufferedTransformation , para que todos possam ser encadeados de forma consistente.

Adler32 em si não é um filtro. Mas herda HashTransformation , e é isso que HashFilter usos. Então você pode trocar em qualquer HashFilter objeto com base e as coisas vão apenas trabalho.

Você pode encontrar uma lista de HashFilter objeto com base em HashTransformation Classe Referência . Eles incluem todos os hashes (como MD5, SHA e Whirlpool), Adler32 e CRC32.

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