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 마이크로 초.
컴파일 result2 :
암호화 루프 실행 시간 : 0.057 마이크로.
이 답변의 기회를 도움이 될 것이다. –
최적화 된 빌드, 릴리스 빌드 또는 최적화되지 않은 "디버그"빌드의 타이밍을 게시해야합니다. 후자의 경우 이러한 타이밍은 의미가 없습니다. – PaulMcKenzie
[Crypto ++ 라이브러리 벤치 마크 테스트에서 어떻게 실행합니까?] (http://stackoverflow.com/q/29264531/608639) 및 [AES/CBC 암호화 및 암호 해독 간의 속도 차이가 있습니까?] (http : // stackoverflow. co.kr/q/20164502/608639) – jww