void DigestFile(const char *filename) { MD5 md5; SHA sha; RIPEMD160 ripemd; SHA256 sha256; HashFilter md5Filter(md5), shaFilter(sha), ripemdFilter(ripemd), sha256Filter(sha256); auto_ptr<ChannelSwitch> channelSwitch(new ChannelSwitch); channelSwitch->AddDefaultRoute(md5Filter); channelSwitch->AddDefaultRoute(shaFilter); channelSwitch->AddDefaultRoute(ripemdFilter); channelSwitch->AddDefaultRoute(sha256Filter); FileSource(filename, true, channelSwitch.release()); HexEncoder encoder(new FileSink(cout), false); cout << "\nMD5: "; md5Filter.TransferTo(encoder); cout << "\nSHA-1: "; shaFilter.TransferTo(encoder); cout << "\nRIPEMD-160: "; ripemdFilter.TransferTo(encoder); cout << "\nSHA-256: "; sha256Filter.TransferTo(encoder); }
void DigestFile(const char *filename) { SHA1 sha; RIPEMD160 ripemd; SHA256 sha256; Tiger tiger; SHA512 sha512; Whirlpool whirlpool; vector_member_ptrs<HashFilter> filters(6); filters[0].reset(new HashFilter(sha)); filters[1].reset(new HashFilter(ripemd)); filters[2].reset(new HashFilter(tiger)); filters[3].reset(new HashFilter(sha256)); filters[4].reset(new HashFilter(sha512)); filters[5].reset(new HashFilter(whirlpool)); auto_ptr<ChannelSwitch> channelSwitch(new ChannelSwitch); size_t i; for (i=0; i<filters.size(); i++) channelSwitch->AddDefaultRoute(*filters[i]); FileSource(filename, true, channelSwitch.release()); HexEncoder encoder(new FileSink(cout), false); for (i=0; i<filters.size(); i++) { cout << filters[i]->AlgorithmName() << ": "; filters[i]->TransferTo(encoder); cout << "\n"; } }
//获取文件的MD5码 CString CProcessMgr::GetFileMD5(CString sFilePath) { std::string strFilePath = (LPCTSTR)sFilePath; CryptoPP::Weak::MD5 md5; CryptoPP::HashFilter filter(md5); std::auto_ptr<CryptoPP::ChannelSwitch> channelSwitch(new CryptoPP::ChannelSwitch); channelSwitch->AddDefaultRoute(filter); std::wstring wstr = s2ws_1(strFilePath); CryptoPP::FileSource(wstr.c_str(), true, channelSwitch.release()); std::stringstream result; CryptoPP::HexEncoder encoder(new CryptoPP::FileSink(result), false); filter.TransferTo(encoder); std::string strResult = result.str(); CString sResult = strResult.c_str(); return sResult; }
bool CFilePro::GetFileMD5(CString strInFile,CString & strOutMd5) { if (access(strInFile,0)!=0) { m_strErrMsg.Format(_T("文件【%s】无法访问!"),strInFile); return false; } CryptoPP::Weak::MD5 md5; CryptoPP::HashFilter filter(md5); std::auto_ptr<CryptoPP::ChannelSwitch> channelSwitch(new CryptoPP::ChannelSwitch); channelSwitch->AddDefaultRoute(filter); std::string s = strInFile.GetBuffer(0); std::wstring wstr = s2ws(s); CryptoPP::FileSource(wstr.c_str(), true, channelSwitch.release()); std::stringstream result; CryptoPP::HexEncoder encoder(new CryptoPP::FileSink(result), false); filter.TransferTo(encoder); s = result.str(); strOutMd5 = s.c_str(); return true; }