java.Sicherheit.InvalidKeyException: Nicht installiert-Anbieter unterstützt diesen Schlüssel: com.Sonne.crypto.Anbieter.DESKey
import java.security.*;
import java.security.spec.InvalidParameterSpecException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.*;
import java.util.*;
import javax.crypto.spec.DHParameterSpec;
public class Encrypting{
public static void main(String[] args) {
try {
KeyPair alice_key;
KeyPair bob_key ;
String plaintext="hi how r u";
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH");
AlgorithmParameterGenerator paramGen = AlgorithmParameterGenerator
.getInstance("DH");
paramGen.init(1024);
AlgorithmParameters params = paramGen.generateParameters();
DHParameterSpec dhSpec = (DHParameterSpec) params
.getParameterSpec(DHParameterSpec.class);
keyGen.initialize(dhSpec);
alice_key = keyGen.generateKeyPair();
bob_key = keyGen.generateKeyPair();
Cipher cipher = Cipher.getInstance("RSA");
SecretKey secret_alice = combine(alice_key.getPrivate(), bob_key.getPublic());
cipher.init(Cipher.ENCRYPT_MODE, secret_alice);
byte[] x = cipher.doFinal(plaintext.getBytes());
System.out.println("encrypted message");
for(int i=0;i<x.length;i++)
System.out.print((char)x[i]);
cipher.init(Cipher.DECRYPT_MODE, secret_alice);
byte[] y = cipher.doFinal(x);
System.out.println();
System.out.println("decrypted message");
for(int i=0;i<y.length;i++)
System.out.print((char)y[i]);
SecretKey secret_bob = combine(bob_key.getPrivate(),
alice_key.getPublic());
System.out.println(Arrays.toString(secret_alice.getEncoded()));
System.out.println(Arrays.toString(secret_bob.getEncoded()));
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvalidParameterSpecException ex) {
Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvalidAlgorithmParameterException ex) {
Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
} catch (NoSuchPaddingException ex) {
Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvalidKeyException ex) {
Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalBlockSizeException ex) {
Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
} catch (BadPaddingException ex) {
Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
}
}
private static SecretKey combine(PrivateKey private1, PublicKey public1) {
SecretKey secretKey=null;
try {
KeyAgreement ka = KeyAgreement.getInstance("DH");
ka.init(private1);
ka.doPhase(public1, true);
secretKey = ka.generateSecret("DES");
return secretKey;
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvalidKeyException ex) {
Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
}
return secretKey;
}
}
Bekam ich eine Fehlermeldung wie folgt
java.security.InvalidKeyException: No installed provider supports this key: com.sun.crypto.provider.DESKey
at javax.crypto.Cipher.chooseProvider(Cipher.java:878)
at javax.crypto.Cipher.init(Cipher.java:1213)
at javax.crypto.Cipher.init(Cipher.java:1153)
at NewClass.main(Encrypting.java:33)
- Was genau erwartest du passiert, wenn Sie die initialize-RSA-Verschlüsselung mit dem DES-Schlüssel?
- DH ist eine wichtige Vereinbarung-Algorithmus, RSA-Schlüssel-transport-Algorithmus. Verwenden Sie eine oder das andere, nicht beide, in Verbindung mit einem symmetrischen Verschlüsselungsalgorithmus wie AES.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Oleg erwähnt in den Kommentaren, die Sie erstellt haben eine
Cipher
Objekt den falschen Typ. Versuchen Sie:zu
Ich würde empfehlen Ihnen dringend, einen Modus angeben und Polsterung als auch, um zu vermeiden, dass man sich auf provider-Standardeinstellungen.