计算Visual Studio 2017中AES/CCM的时间加密



我正在使用库加密 5.6.5和Visual Studio 2017。

如何计算AES-CCM的加密时间?

我想知道如何计算AES-CCM的加密时间。

Crypto Wiki提供了文章基准。它提供了许多有关图书馆性能,如何计算吞吐量的细节,甚至引用了测量实际吞吐量的源代码。信不信由你,对clock的简单调用可以很好地测量批量加密。另请参阅基准|同一篇Wiki文章中的正时循环。

为AES/CCM进行基准测试,请执行以下操作。它基于加密 基准测试代码,但它使用ThreadUserTimer而不是直接调用clockThreadUserTimer在所有OS和C 的所有版本中工作。

您需要以cpuFreq拨打处理器速度。您应该运行./governor.sh perf以从空闲或C级睡眠状态移动CPU,但是您不能因为它是Linux脚本。您可以在TestScript/文件夹中找到它。

#include "cryptlib.h"
#include "secblock.h"
#include "hrtimer.h"
#include "osrng.h"
#include "modes.h"
#include "aes.h"
#include "ccm.h"
#include <iostream>
const double runTimeInSeconds = 3.0;
const double cpuFreq = 2.7*1000*1000*1000;
int main(int argc, char* argv[])
{
    using namespace CryptoPP;
    AutoSeededRandomPool prng;
    SecByteBlock key(16);
    prng.GenerateBlock(key, key.size());
    CCM<AES>::Encryption cipher;
    cipher.SetKeyWithIV(key, key.size(), key);
    const int BUF_SIZE=RoundUpToMultipleOf(2048U,
        dynamic_cast<StreamTransformation&>(cipher).OptimalBlockSize());
    AlignedSecByteBlock buf(BUF_SIZE);
    prng.GenerateBlock(buf, BUF_SIZE);
    double elapsedTimeInSeconds;
    unsigned long i=0, blocks=1;
    ThreadUserTimer timer;
    timer.StartTimer();
    do
    {
        blocks *= 2;
        for (; i<blocks; i++)
            cipher.ProcessString(buf, BUF_SIZE);
        elapsedTimeInSeconds = timer.ElapsedTimeAsDouble();
    }
    while (elapsedTimeInSeconds < runTimeInSeconds);
    const double bytes = static_cast<double>(BUF_SIZE) * blocks;
    const double ghz = cpuFreq / 1000 / 1000 / 1000;
    const double mbs = bytes / 1024 / 1024 / elapsedTimeInSeconds;
    const double cpb = elapsedTimeInSeconds * cpuFreq / bytes;
    std::cout << cipher.AlgorithmName() << " benchmarks..." << std::endl;
    std::cout << "  " << ghz << " GHz cpu frequency" << std::endl;
    std::cout << "  " << cpb << " cycles per byte (cpb)" << std::endl;
    std::cout << "  " << mbs << " MiB per second (MiB)" << std::endl;
    // std::cout << "  " << elapsedTimeInSeconds << " seconds passed" << std::endl;
    // std::cout << "  " << (word64) bytes << " bytes processed"  << std::endl;
    return 0;
}

在2.7 GHz的核心i5-6400上运行它结果:

$ g++ bench.cxx ./libcryptopp.a -o bench.exe
$ ./bench.exe
AES/CCM benchmarks...
  2.7 GHz cpu frequency
  3.00491 cycles per byte (cpb)
  856.904 MiB per second (MiB)

通常,您将基准一个具有CTR模式的库。例如,使用该模式执行所有超级基准测试。您可以通过包括"modes.h"切换到CTR模式,然后:

CTR_Mode<AES>::Encryption cipher;
cipher.SetKeyWithIV(key, key.size(), key);

最后,使用CTR模式进行相同的测试:

$ ./bench.exe
AES/CTR benchmarks...
  2.7 GHz cpu frequency
  0.568922 cycles per byte (cpb)
  4525.97 MiB per second (MiB)

相关内容

  • 没有找到相关文章

最新更新