MetalOxygen Ierakstīts Maijs 15, 2015 Share Ierakstīts Maijs 15, 2015 (labots) Labdien!Lieta tāda, cenšos uzrakstīt kodu failu šifrēšanai izmantojot Crypto++ bibliotēkas. Bet visas manas versijas nonāk pie viena un tā paša errora: Varbūt kādu varētu norādīt, kur būtu meklējamas nepilnības un kā tās būtu iespējams labot? int useidea_enc(string FILENAME, string NEW_FILENAME) { ifstream inFile; ofstream outFile; char writet; string readt2; string writet2; inFile.open(FILENAME.c_str(), ios::in | ios::binary); outFile.open(NEW_FILENAME.c_str(), ios::out | ios::binary); if (inFile.fail()) { cout << " Neizdevas atvert sifrejamo failu.\n" << endl; if (outFile.fail()) {cout << " Neizdevas izveidot jauno failu.\n" << endl;} std::cout << std::endl << " Nospiediet jekuru tausinu, lai turpinatu..."; getchar(); exit(1); } if (outFile.fail()) { cout << " Neizdevas izveidot jauno failu.\n" << endl; std::cout << std::endl << " Nospiediet jekuru tausinu, lai turpinatu..."; getchar(); exit(1); } AutoSeededRandomPool prng; SecByteBlock key(IDEA::DEFAULT_KEYLENGTH); prng.GenerateBlock(key, key.size()); byte iv[IDEA::BLOCKSIZE]; prng.GenerateBlock(iv, sizeof(iv)); try { while(!inFile.eof()) { readt2 = inFile.get(); CBC_Mode< IDEA >::Encryption e; e.SetKeyWithIV(key, key.size(), iv); StringSource(readt2, true, new StreamTransformationFilter(e, new StringSink(writet2) ) ); strncpy(&writet, writet2.c_str(), sizeof(writet)); outFile.put(writet); } } catch(const CryptoPP::Exception& e) { cerr << e.what() << endl; exit(1); } inFile.close(); outFile.close(); return 0; } Kods ņemts no piemēra šeit: http://www.cryptopp.com/wiki/IDEA P.S. Jau apzinos, ka manas C++ prasmes (vai vispār OOP) nav ne tuvu tās labākās, nav nepieciešams to komentēt. Labots Maijs 15, 2015 - MetalOxygen Link to comment Share on other sites More sharing options...
Eric Maijs 15, 2015 Share Maijs 15, 2015 Palaid debuggeri un paskaties kuraa rindiņā rodas exceptions. Lieku uz neinicializētiem mainīgajiem, kuros kaut ko mēģina rakstīt. Link to comment Share on other sites More sharing options...
MetalOxygen Maijs 16, 2015 Author Share Maijs 16, 2015 (labots) paslēdzot ārā koda daļas nonācu līdz secinājumam, ka pie vainas ir viena no šīm rindām: AutoSeededRandomPool prng; SecByteBlock key(Blowfish::DEFAULT_KEYLENGTH); prng.GenerateBlock( key, key.size() ); byte iv[ Blowfish::BLOCKSIZE ]; prng.GenerateBlock( iv, sizeof(iv) ); tiešām nebūs versiju, kas te var izraisīt tādu kļūdu? Labots Maijs 16, 2015 - MetalOxygen Link to comment Share on other sites More sharing options...
Mezavecis Maijs 16, 2015 Share Maijs 16, 2015 Diez vai kāds kaut ko jēdzīgu ieteiks, jo minētais kods izmanto specifiskas klases, kuras parasti reti kam ir zināmas. Nu nevar izzīlēt no esošā koda, ko dara funkcijas GenerateBlock un SecByteBlock un ko satur klase AutoSeededRandomPool. Ej vien ar debageri cauri un skaties pats. Ieliec pašu projektu te ar visiem libiem. Link to comment Share on other sites More sharing options...
bubu Maijs 17, 2015 Share Maijs 17, 2015 (labots) Man šāds koda fragments neko nekrašo. $ cat test.cpp #include <cryptopp/secblock.h> #include <cryptopp/blowfish.h> #include <cryptopp/osrng.h> int main() { using namespace CryptoPP; AutoSeededRandomPool prng; SecByteBlock key(Blowfish::DEFAULT_KEYLENGTH); prng.GenerateBlock( key, key.size() ); byte iv[ Blowfish::BLOCKSIZE ]; prng.GenerateBlock( iv, sizeof(iv) ); } $ clang++ test.cpp -lcryptopp -pthread $ ./a.out Labots Maijs 17, 2015 - bubu Link to comment Share on other sites More sharing options...
MetalOxygen Maijs 17, 2015 Author Share Maijs 17, 2015 (labots) Visu projektu ielādēju šeitMan arī compile strādā ideāli, bet debug met visādus brīnumus. Errors arī padarbinot kodu ne vienmēr izlec tajā pašā vietā.Pamanījos aizrakties, līdz tam, ka tas varētu būt kaut kas Visual Studio raksturīgs, jo pa laikam izlido viens cits errors (īsti gan vēl neizdomāju tieši pie kādiem nosacījumiem šis parādās): debug assertion failed _block_type_is_valid(phead- nblockuse) nav pilns errora teksts, diemžēl vēl neuztaisīju skrīnshotu. Labots Maijs 17, 2015 - MetalOxygen Link to comment Share on other sites More sharing options...
bubu Maijs 18, 2015 Share Maijs 18, 2015 (labots) Man arī compile strādā ideāli, bet debug met visādus brīnumus. Debugot, debugot vajag. Tas koda piemērs strādā ne tikai kompilējot - arī izpildot viss notiek. Kā redzi manā postā tur ir arī izpilde - "./a.out". Kļūda tev ir nevis kodā, bet tajā kā tu uztaisīji Visual Studio projektu. Tas tev ir uztaisīts kā .NET projekts - kas tiek kompilēts ar C++/CLI un ir atkarīgs no .NET freimworka. Tas neģenerē neitīvu izpildāmo kodu, bet gan .NET baitkodu. Rezultātā tur kaut kāda miskaste notiek ar atmiņu, kad tiek izsauktas Crypto++ metodes, kuras ir tīras C/C++. Noņem nost /clr argumentu projektam un viss strādās. Dodot citiem skatīties tavu kodu vajag to satīrīt - īpaši indentāciju. Tev viss tur ir līki saindentēts. Vēl iesaku nejaukt vienā kodā kopā C I/O funckijas un C++ I/O klases izvadam/ievadam uz konsoli. Lieto tikai viena veida I/O. Un liekot VS projektu, nevajag pakot .obj, .pdb, .pch, .ilk un citus ģenerētos failus. Tad citiem mazāks arhīvs būs jāvelk. Labots Maijs 18, 2015 - bubu 1 Link to comment Share on other sites More sharing options...
MetalOxygen Maijs 18, 2015 Author Share Maijs 18, 2015 (labots) paldies nedaudz vēlāk tiks pārbaudīts un došu ziņu. p.s. atvainojos par to koda noformējumu, tiešām steigā tikai līkos komentārus izdzēsu. p.p.s. jā, problēma novērsta. radās kaut kādas jaunas kļūdas, bet šīs izskatās novēršamas Labots Maijs 18, 2015 - MetalOxygen Link to comment Share on other sites More sharing options...
nevertell Maijs 18, 2015 Share Maijs 18, 2015 IDE ir mūsdienu developeru posts. 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!