bool BotanWrapper::EncryptFile(QString Source, QString Destination) { QFileInfo name = Source; QString base = name.baseName(); QString encrypted1 = eoutput + base + ".gg"; QString encrypted2 = toutput + base + ".twofish"; QFile e(encrypted1); QFile t(encrypted2); try { //Setup the key derive functions PKCS5_PBKDF2 pbkdf2(new HMAC(new Keccak_1600)); const u32bit PBKDF2_ITERATIONS = 700000; qDebug() << "create keys"; //Create the KEY and IV KDF* kdf = get_kdf("KDF2(SHA-512)"); AutoSeeded_RNG rng; qDebug() << "create salt"; SecureVector<byte> salt(256); rng.randomize(&salt[0], salt.size()); mSalt = salt; qDebug() << "create master key"; //Create the master key SecureVector<byte> mMaster = pbkdf2.derive_key(128, mPassword.toStdString(), &mSalt[0], mSalt.size(),PBKDF2_ITERATIONS).bits_of(); SymmetricKey mKey = kdf->derive_key(32, mMaster, "salt1"); InitializationVector mIV = kdf->derive_key(16, mMaster, "salt2"); qDebug() << "start encryption"; string inFilename = Source.toStdString(); string outFilename = encrypted1.toStdString(); std::ifstream inFile(inFilename.c_str()); std::ofstream outFile(outFilename.c_str()); Pipe pipe(get_cipher("AES-256/EAX", mKey, mIV,ENCRYPTION),new DataSink_Stream(outFile)); outFile.write((const char*)mSalt.begin(), mSalt.size()); pipe.start_msg(); inFile >> pipe; pipe.end_msg(); outFile.flush(); outFile.close(); inFile.close(); QMessageBox msgBox; /*****************TWOFISH ENCRYPTION********************/ qDebug() << "Twofish"; //Setup the key derive functions PKCS5_PBKDF2 pbkdf3(new HMAC(new Skein_512)); //Create the KEY and IV KDF* kdf2 = get_kdf("KDF2(Whirlpool)"); SecureVector<byte> salt2(256); rng.randomize(&salt2[0], salt2.size()); mSalt2 = salt2; //Create the master key SecureVector<byte> mMaster2 = pbkdf3.derive_key(128, mPassword2.toStdString(), &mSalt2[0], mSalt2.size(),PBKDF2_ITERATIONS).bits_of(); SymmetricKey mKey2 = kdf2->derive_key(32, mMaster2, "salt1"); InitializationVector mIV2 = kdf2->derive_key(16, mMaster2, "salt2"); string inFilename2 = encrypted1.toStdString(); string outFilename2 = encrypted2.toStdString(); std::ifstream inFile2(inFilename2.c_str()); std::ofstream outFile2(outFilename2.c_str()); Pipe pipe2(get_cipher("Twofish/CFB", mKey2, mIV2,ENCRYPTION),new DataSink_Stream(outFile2)); outFile2.write((const char*)mSalt2.begin(), mSalt2.size()); pipe2.start_msg(); inFile2 >> pipe2; pipe2.end_msg(); outFile2.flush(); outFile2.close(); inFile2.close(); /**************************SERPENT ENCRYPTION*****************/ //Create the KEY and IV KDF* kdf3 = get_kdf("KDF2(Tiger)"); SecureVector<byte> salt3(256); rng.randomize(&salt3[0], salt3.size()); mSalt3 = salt3; //Create the master key SecureVector<byte> mMaster3 = pbkdf2.derive_key(128, mPassword3.toStdString(), &mSalt3[0], mSalt3.size(),PBKDF2_ITERATIONS).bits_of(); SymmetricKey mKey3 = kdf3->derive_key(32, mMaster3, "salt1"); InitializationVector mIV3 = kdf3->derive_key(16, mMaster3, "salt2"); string inFilename3 = encrypted2.toStdString(); string outFilename3 = Destination.toStdString(); std::ifstream inFile3(inFilename3.c_str()); std::ofstream outFile3(outFilename3.c_str()); qDebug() << "serpent"; Pipe pipe3(get_cipher("Serpent/CBC/PKCS7", mKey3, mIV3,ENCRYPTION),new DataSink_Stream(outFile3)); outFile3.write((const char*)mSalt3.begin(), mSalt3.size()); pipe3.start_msg(); inFile3 >> pipe3; pipe3.end_msg(); outFile3.flush(); outFile3.close(); inFile3.close(); msgBox.setText("Success!"); msgBox.setInformativeText("File successfully encrypted!"); msgBox.setStandardButtons(QMessageBox::Ok); msgBox.setDefaultButton(QMessageBox::Ok); msgBox.exec(); e.remove(); t.remove(); return true; } catch(...) { return false; } }
void writePDB(double* geomData, char* fileName_PDB) { const char* inpFile = "writePDB.inp"; const char* mainoutFile = "main_out.MetPDB"; const char* logFile = "log"; const char* errorFile = "err"; // write the configuration file used for ECEPP/3 model engine ofstream outFile(inpFile, ios::out); outFile << "$CNTRL" << endl; outFile << "runtyp = energy" << endl; outFile << "PRINT_CART" << endl; outFile << "OUTFORMAT = PDB" << endl; outFile << "FILE = "; outFile << fileName_PDB << endl; outFile << "res_code= one_letter" << endl; outFile << "$END" << endl << endl; outFile << "$SEQ" << endl; outFile << "H" << endl; outFile << "YGGFM" << endl; outFile << "O" << endl; outFile << "$END" << endl; outFile << "$GEOM" << endl << endl; for(int i=0; i<6;i++) { outFile << setw(8) // 设定field宽度 << setprecision(3) // 设置小数位置 << setiosflags(ios::showpoint) // keep trailing 0s << setiosflags(ios::fixed) // 使用这些设置 << geomData[i]; } outFile << endl; for(i=6; i<9;i++) { outFile << setw(8) // 设定field宽度 << setprecision(3) // 设置小数位置 << setiosflags(ios::showpoint) // keep trailing 0s << setiosflags(ios::fixed) // 使用这些设置 << geomData[i]; } outFile << endl; for(i=9; i<12;i++) { outFile << setw(8) // 设定field宽度 << setprecision(3) // 设置小数位置 << setiosflags(ios::showpoint) // keep trailing 0s << setiosflags(ios::fixed) // 使用这些设置 << geomData[i]; } outFile << endl; for(i=12; i<17;i++) { outFile << setw(8) // 设定field宽度 << setprecision(3) // 设置小数位置 << setiosflags(ios::showpoint) // keep trailing 0s << setiosflags(ios::fixed) // 使用这些设置 << geomData[i]; } outFile << endl; for(i=17; i<24;i++) { outFile << setw(8) // 设定field宽度 << setprecision(3) // 设置小数位置 << setiosflags(ios::showpoint) // keep trailing 0s << setiosflags(ios::fixed) // 使用这些设置 << geomData[i]; } outFile << endl; outFile << endl; outFile << "$END" << endl; outFile.flush(); outFile.close(); system("i.bat ENERGY writePDB MetPDB x x 1>> log 2> err"); ofstream outFile1(inpFile, ios::out); outFile1.flush(); outFile1.close(); ofstream outFile2(mainoutFile, ios::out); outFile2.flush(); outFile2.close(); ofstream outFile3(logFile, ios::out); outFile3.flush(); outFile3.close(); ofstream outFile4(errorFile, ios::out); outFile4.flush(); outFile4.close(); }