java.security.NoSuchAlgorithmException: MD5 с RSA KeyFactory недоступен - PullRequest
0 голосов
/ 14 июня 2019

java.security.NoSuchAlgorithmException: MD5withRSA KeyFactory недоступен

Я попытался создать экземпляр KeyFactory всеми тремя возможными методами:

  • Опция 1. public static KeyFactory getInstance(Строковый алгоритм)

  • Опция 2. public static KeyFactory getInstance (Строковый алгоритм, поставщик String)

  • Опция 3. public static KeyFactory getInstance (Строковый алгоритм,Провайдер)

но независимо от того, что выдает исключение:

В случае варианта 1: java.security.NoSuchAlgorithmException: MD5withRSA KeyFactory недоступен

Ввариант 3: java.security.NoSuchAlgorithmException: такого алгоритма нет: MD5withRSA для провайдера xxxxxxxxxx

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.Provider;
import java.security.PublicKey;
import java.security.Security;
import java.security.Signature;
import java.security.SignatureException;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.TreeSet;

import javax.crypto.Cipher;

import org.apache.commons.codec.binary.Base64;

public class KeyTest {
public static void main(String[] args) {
for (Provider provider : Security.getProviders()) {
System.out.println(provider.getInfo());
try {
// Option 3
KeyFactory keyFactory = KeyFactory.getInstance("MD5withRSA", provider);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
// Option 1
try {
KeyFactory keyFactory = KeyFactory.getInstance("MD5withRSA");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}

Ожидается, что этот код создаст экземпляр KeyFactory для алгоритма MD5withRSA, как я вижу, он присутствует в одном издоступный поставщик (IBMJCE):

Вот часть sysout вышеупомянутой программы, которая подтверждаетДоступен алгоритм MD5 с RSA:

Поставщик IBMJCE реализует следующее:

HMAC-SHA1, MD2, MD5, MARS, SHA, MD2withRSA, MD5 с RSA, SHA1 с RSRS, RSA, SHA1 с RSA, RC2, RC4, Seal) реализует следующее:

Алгоритмы подписи: SHA1withDSA, SHA1withRSA, MD5withRSA, MD2withRSA, SHA256withRSA, SHA384withRSA, SHA512withRSA

...