Как использовать jbenchx для изменения int моего шифрования размера ключа RSA - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь использовать jbenchx для тестирования производительности различных методов шифрования, и я не могу заставить команду @ForEachInt работать правильно

import java.security.GeneralSecurityException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Security;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

import org.jbenchx.annotations.Bench;
import org.jbenchx.annotations.ForEachInt;

public class keyGen {


public KeyPair generateKeyPair(@ForEachInt({112,196,256}) int size) throws GeneralSecurityException {
    KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", "BC");
    keyPairGen.initialize(size);
    return keyPairGen.generateKeyPair();
}

    @Bench
    public Object createkey() throws GeneralSecurityException {
    Security.addProvider(new BouncyCastleProvider());
    KeyPair RSA = generateKeyPair();
    return RSA;
}
}
}

Я попытался запустить отдельный метод только с keyPairGen.initialize, и онтоже не будет работать.Может ли кто-нибудь сказать мне мою ошибку

1 Ответ

0 голосов
/ 07 февраля 2019

Команда @ForEachInt просто выполняет тест для каждого значения int, например, код:

import org.jbenchx.annotations.*;
public class Main {
    @Bench
    public int[] doSomething(@ForEachInt({ 20, 10, 30, 10 }) int size) {
        return new int[size];
    }
}

дает следующий вывод:

Initializing Benchmarking Framework...
Running on Windows 7 6.1
Max heap = 3784310784 System Benchmark = 0,83ns
Performing 4 benchmarking tasks..
[0] Main.doSomething(20)****!********** 16,3ns
[1] Main.doSomething(10)**********  16,6ns
[2] Main.doSomething(30)****!************   17,1ns
[3] Main.doSomething(10).*.***.***  16,5ns
Success.

как единое целоеМожно видеть, что @ForEachInt -статум имеет четыре int -значения и, соответственно, выполняется четыре теста.Аналогичный пример показан на http://iquadrat.github.io/jbenchx/.

В вашем коде есть два недостатка:

  1. Код не компилируется, поскольку метод generateKeyPair() вызывается внутри createkey() -метод нигде не определен (определенный generateKeyPair(int) -метод имеет int -параметр и, следовательно, другую сигнатуру).
  2. Команду @ForEachInt необходимо использовать в метке, которая помеченас аннотацией @Bench, то есть createKey().

Измените код следующим образом:

import java.security.GeneralSecurityException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.jbenchx.annotations.Bench;
import org.jbenchx.annotations.ForEachInt;
public class keyGen {
    private KeyPair generateKeyPair(int size) throws GeneralSecurityException {
        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", "BC");
        keyPairGen.initialize(size);
        return keyPairGen.generateKeyPair();
    }
    @Bench
    public Object createkey(@ForEachInt({ 112, 196, 256 }) int size) throws GeneralSecurityException {
        Security.addProvider(new BouncyCastleProvider());
        KeyPair RSA = generateKeyPair(size);
        return RSA;
    }
}

Тогда вывод будет:

Initializing Benchmarking Framework...
Running on Windows 7 6.1
Max heap = 3784310784 System Benchmark = 0,84ns
Performing 3 benchmarking tasks..
[0] keyGen.createkey(112)!!!!!!!!!!.!.!!!!!!!!!!!!.!!.!!!..!!!*!!..*..*...* 952us
[1] keyGen.createkey(196)!!!!!..*....*...*  1.94ms
[2] keyGen.createkey(256)!!!!!!!!*.*!!*.*.*!.*.*!*.**.****. 2.88ms
Success.
...