В настоящее время я работаю над инструментом для асимметричного шифрования с RSA:
PublicKey FrKey;
public byte[] encrypt(String msg) {
byte[] msg1 = null;
Cipher cp = Cipher.getInstance("RSA");
cp.init(Cipher.ENCRYPT_MODE, FrKey);
msg1 = cp.doFinal(msg.getBytes());
return msg1;
}
public void setOpKey(String s) {
X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(s.getBytes()));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(pubKeySpec);
System.out.println("Friends Public: "+s+"\n\n"+publicKey);
}
В то время как функция setOpKey, которая должна устанавливать открытый ключ противника, кажется, работает нормально, когда класс шифрованиявыполняется java возвращает ошибку:
java.security.InvalidKeyException: ни один из установленных провайдеров не поддерживает этот ключ: (null)
Из этой ошибки вы прочитаете, чтоКлюч будет нулевым, но, как видно из вывода консоли ниже, это не так.
Friends Public: / Введенная мной строка, сгенерированная из RSA /
открытый ключ Sun RSA, 1024 бита
модуль: / очень длинное число /
открытый показатель: 65537
Это кажетсябудет ошибка с открытым ключом, но я понятия не имею, как это можно исправить.Буду признателен за любую помощь.
PS: я удалил все предложения try / catch, чтобы сделать код более читабельным.