Dado um nome de arquivo, como posso obter o Adler32 usando Crypto ++
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)
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.