我想測試AES加密的性能。但是每當我運行代碼時,它都會給出不同的結果。爲什麼? 下面是在C++中使用加密++代碼:爲什麼Crypto ++中的AES代碼提供不同的性能結果?
int main(int argc, char* argv[]){
AutoSeededRandomPool prng;
byte key[AES::DEFAULT_KEYLENGTH];
prng.GenerateBlock(key, sizeof(key));
byte iv[AES::BLOCKSIZE];
prng.GenerateBlock(iv, sizeof(iv));
CBC_Mode<AES>::Encryption e;
e.SetKeyWithIV(key, sizeof(key), iv);
CBC_Mode<AES>::Decryption d;
d.SetKeyWithIV(key, sizeof(key), iv);
時間測試是在這裏:
clock_t startTime, finishTime;
std::string plain = "AES CBC Test";
std::string cipher, encoded, recovered;
startTime = clock();
try
{
// The StreamTransformationFilter removes
// padding as required.
StringSource s(plain, true,
new StreamTransformationFilter(e,
new StringSink(cipher)
) // StreamTransformationFilter
); // StringSource
}
catch(const CryptoPP::Exception& e)
{
cerr << e.what() << endl;
exit(1);
}
// save current time just after finishing the encryption loop
finishTime = clock();
和我的測試結果在這裏:
enter code heredouble executionTimeInSec = double(finishTime - startTime)/CLOCK_TICKS_PER_SECOND;
std::cout << "Encryption loop execution time: " << executionTimeInSec * 1000.0 << " microseconds." << std::endl;
std::cout << "Plain text size: " << plain.size() << " bytes." << std::endl;
double data_rate_MiBps = ((double)plain.size()/1048576)/((double)executionTimeInSec) ;
std::cout << "Encryption/decryption loop execution time MB/S: " << data_rate_MiBps << " MB/S." << std::endl;
return 0;}
時序優化調試版本。 編譯結果1:
加密循環執行時間:0.041微秒。
編譯結果2:
加密循環執行時間:0.057毫秒。
這將有助於你的答案的機會,如果你的代碼實際上編譯。 –
您還應該發佈是否計時優化的發佈版本或未優化的「調試」版本。如果是後者,那麼這些時間是沒有意義的。 – PaulMcKenzie
另請參閱[如何在Crypto ++庫基準測試中運行?](http://stackoverflow.com/q/29264531/608639)和[AES/CBC加密與解密之間的速度差異?](http:// stackoverflow。 com/q/20164502/608639) – jww