#include <fstream>
#include <iostream>
#include <QuickHash.h>
using namespace std;
using namespace QuickHash;
bool CalculateFileDigest( const char* filename, char* digesthex )
{
fstream file( filename, ios::in | ios::binary );
if( !file )
{
cout << "\nCould not open file: " << filename;
return false;
}
const unsigned int BUFF_SIZE = 1024;
unsigned char buff[ BUFF_SIZE ];
//Instantiate a CRIPEMD160 object
CRIPEMD160 hash;
//Calculate the digest by calling Update for each block of the file
while( !file.eof() )
{
file.read( ( char* )buff, BUFF_SIZE );
hash.Update( buff, file.gcount() );
}
//Do final changes and get the digest in hex format
hash.FinalHex( digesthex ); // FinalHex reinitializes the hash object for the next use
file.close();
return true;
}
int main()
{
char buff[ 10 ];
char digesthex[ CRIPEMD160::HEXDIGESTSIZE ]; //0 terminated
do
{
//Get the file name from the user
cout << "\nEnter a file name:\n";
char filename[ 256 ];
cin.getline( filename, 256 );
//Calculate the digest
if( CalculateFileDigest( filename, digesthex ) )
cout << "\nDigest: " << digesthex;
//Continue?
cout << "\nContinue (Y/N)?";
cin.getline( buff, 10 );
} while ( *buff == 'y' || *buff == 'Y' );
return 0;
}
|