Java échange de clés de Diffie-Hellman
Je suis en train d'exécuter un code pour effectuer l'échange de clés Diffie-Hellman. Je source le code à partir d'un exemple en ligne (oublier d'où maintenant).
J'ai dû importer de l'bouncycastle.jar qui je suppose a travaillé jusqu'à l'exécution.
mon code:
package testproject;
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.MessageDigest;
import java.security.SecureRandom;
import java.security.Security;
import javax.crypto.KeyAgreement;
import javax.crypto.spec.DHParameterSpec;
public class KeyGen {
private static BigInteger g512 = new BigInteger("1234567890", 16);
//generates a random, non-negative integer for Base
private static BigInteger p512 = new BigInteger("1234567890", 16);
//generates a random, non-negative integer for Prime
public static void main(String[] args) throws Exception {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
DHParameterSpec dhParams = new DHParameterSpec(p512, g512);
//Specify parameters to use for the algorithm
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH", "BC");
//Define specific algorithm to use "diffie-hellman", with provider "bc"
keyGen.initialize(dhParams, new SecureRandom());
//initialize with parameters & secure random seed
KeyAgreement aKeyAgree = KeyAgreement.getInstance("DH", "BC");
//define algorithm for A's key agreement
KeyPair aPair = keyGen.generateKeyPair();
//generate keyPair for A
KeyAgreement bKeyAgree = KeyAgreement.getInstance("DH", "BC");
//define algorithm for B's key agreement
KeyPair bPair = keyGen.generateKeyPair();
//generate keyPair for B
aKeyAgree.init(aPair.getPrivate());
//initialize A's keyAgreement with A's private key
bKeyAgree.init(bPair.getPrivate());
//initialize B's keyAgreement with B's private key
aKeyAgree.doPhase(bPair.getPublic(), true);
//do last phase of A's keyAgreement with B's public key
bKeyAgree.doPhase(aPair.getPublic(), true);
//do last phase of B's keyAgreement with A's public key
MessageDigest hash = MessageDigest.getInstance("SHA1", "BC");
System.out.println(new String(hash.digest(aKeyAgree.generateSecret())));
//generate secret key for A, hash it.
System.out.println(new String(hash.digest(bKeyAgree.generateSecret())));
//generate secret key for B, hash it.
}
}
C'est la ligne à l'origine du problème:
KeyPair aPair = keyGen.generateKeyPair();
Je suis confus quant à ce que l'erreur est, comme je l'ai trouvé chacune des méthodes, c'est retourner "source inconnue" pour.
Tout de faire la lumière sur ce serait très apprécié.
Suite(Modifier):
Java - Échange De Clés Diffie-Hellman De Chiffrement Mauvaise Sortie
Vous devez vous connecter pour publier un commentaire.
Vous déjà préféré bouncycastle version. Mais j'ai mis en place un peu helloworld version de celui-ci à des fins d'apprentissage. Peut-être il peut être utile pour ceux qui veulent simplement utiliser de l'échange de clés Diffie-Hellman en Java pur, sans dépendances:
https://github.com/firatkucuk/diffie-hellman-helloworld
Ce commentaire est tout simplement faux:
Tout ce que vous faites, il est de créer le nombre
0x1234567890
à chaque fois. Il n'y a rien d'aléatoire.On dirait que vous avez copié à partir de http://www.java2s.com/Tutorial/Java/0490__Security/DiffieHellmanKeyAgreement.htm. Comme cette réponse d'accord, le code ne fait pas de sens.
Vous pouvez essayer de la clé réelle de change exemple sur ce site.
Au lieu de le code:
vous devez utiliser: