У меня есть код C ++, похожий на этот:
Botan::AutoSeeded_RNG botan_rng;
Botan::RSA_PrivateKey private_key(botan_rng, 2048);
Botan::PK_Signer botan_pss_signer(private_key, botan_rng, "PSSR_Raw(SHA-256,MGF1,32)");
То, что я хотел бы сделать, это реализовать ту же функциональность в Java. Что я пробовал до сих пор, так это:
Signature rsa = null;
try {
rsa = Signature.getInstance("SHA256withRSAAndMGF1", "BC");
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
e.printStackTrace();
}
try {
rsa.initSign((PrivateKey)privateKey, new SecureRandom());
} catch (InvalidKeyException e) {
e.printStackTrace();
}
И privateKey генерируется как
KeyPairGenerator kpg = null;
try {
kpg = KeyPairGenerator.getInstance("RSA");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
kpg.initialize(2048);
KeyPair kp = kpg.generateKeyPair();
Key publicKey = kp.getPublic();
Key privateKey = kp.getPrivate();
Вопрос в том, правильно ли я поступаю? Или в моем Java-коде чего-то не хватает? Особенно в отношении той части генератора случайных чисел, я не уверен, что Java SecureRandom делает то же самое, что и в Botan::AutoSeeded_RNG
, а также алгоритм, который я использую в BC, не уверен, что это эквивалент для PSSR_Raw (SHA-256, MGF1,32)