2016-03-26 16 views
0

Ich versuche, El-Gamal Verschlüsselungsalgorithmus in einem System zu implementieren. Ich habe gerade etwas über den Algorithmus gelernt und im Internet nach Codes gesucht, um eine Idee zu bekommen, sie zu implementieren. Ich fand den folgenden Code im Internet und gibt mir diese seltsame Fehler:(BouncyCastle Fehler: min darf nicht größer sein als max) Implementierung von El-Gamal-Algorithmus mit Java

Exception in thread "main" java.lang.IllegalArgumentException:'min' may not be greater than 'max' 
    at org.bouncycastle.util.BigIntegers.createRandomInRange(Unknown Source) 

    at org.bouncycastle.crypto.generators.DHKeyGeneratorHelper.calculatePrivate(Unknown Source) 

    at org.bouncycastle.crypto.generators.ElGamalKeyPairGenerator.generateKeyPair(Unknown Source) 
    at org.bouncycastle.jcajce.provider.asymmetric.elgamal.KeyPairGeneratorSpi.generateKeyPair(Unknown Source) 
    at ElGamal.main(ElGamal.java:20) 

Hier ist der Code-Segment:

import java.security.Key; 
import java.security.KeyPair; 
import java.security.KeyPairGenerator; 
import java.security.SecureRandom; 
import java.security.Security; 

import javax.crypto.Cipher; 

public class ElGamal { 
    public static void main(String[] args) throws Exception { 
     Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 

     byte[] input = "abcdefgh".getBytes(); 
     Cipher cipher = Cipher.getInstance("ElGamal/None/NoPadding", "BC"); 
     KeyPairGenerator generator = KeyPairGenerator.getInstance("ElGamal", "BC"); 
     SecureRandom random = new SecureRandom(); 

     generator.initialize(128, random); 

     KeyPair pair = generator.generateKeyPair(); 
     Key pubKey = pair.getPublic(); 
     Key privKey = pair.getPrivate(); 
     cipher.init(Cipher.ENCRYPT_MODE, pubKey, random); 
     byte[] cipherText = cipher.doFinal(input); 
     System.out.println("cipher: " + new String(cipherText)); 

     cipher.init(Cipher.DECRYPT_MODE, privKey); 
     byte[] plainText = cipher.doFinal(cipherText); 
     System.out.println("plain : " + new String(plainText)); 
    } 
} 

Ich bin sehr neu auf die Kryptographie und dies ist wahrscheinlich albern. Es tut mir leid, wenn die Frage zu albern ist. Und danke im Voraus.

+0

Haben Sie versucht, die Tastengröße anzupassen? Dies könnte ein Fehler in BC sein. Welche Version verwendest du und hast du eine andere ausprobiert? –

+0

Ich habe versucht, aber hat nicht funktioniert. Aber ich fand im Internet, dass El-Gamal an der Schlüsselgröße von mindestens 160 arbeitet. Also korrigierte die Schlüsselgröße später auf 512. @ Aritjom.B –

Antwort

2

Alles klar Leute. Ich habe das Problem endlich gefunden. Es ist nichts falsch mit dem Code außer der Schlüsselgröße. Es ist hauptsächlich ein Abhängigkeitsproblem.

  1. Ändern Sie zuerst die Schlüsselgröße im Code auf 160 oder höher.

  2. Herunterladen und Extrahieren von bouncyCastle API Jar-Dateien von ihrer Website. Befolgen Sie die hier aufgeführten Schritte: http://www.bouncycastle.org/wiki/display/JA1/Provider+Installation

Ich habe die statische Installationsmethode verwendet.

  1. Herunterladen der Java-Kryptographie-Erweiterung (JCE) Unbegrenzte Stärke Jurisdiction-Richtliniendateien für Ihr JDK. Für Version 8 gehen Sie zu diesem Link und folgen Sie den Anweisungen in der Datei lesen Sie nach dem Herunterladen und Extrahieren. http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

    1. Suchen Sie die jre \ lib \ security-Verzeichnis für die Java-Instanz, dass das Atom using.For Beispiel, könnte dieser Ort sein: C: \ Programme \ Java \ jre8 \ lib \ security.

    2. Entfernen Sie die folgenden .jar-Dateien aus diesem Verzeichnis: local_policy.jar und US_export_policy.jar.

    3. Ersetzen Sie diese beiden Dateien durch die .jar-Dateien, die im JCE Unlimited Strength Jurisdiction Policy Files-Download enthalten sind.

    4. Starten Sie Ihren Computer neu und Sie können loslegen.

P. S. Während Schritt (3.2) möchten Sie möglicherweise eine Kopie Ihrer lokalen Richtliniendateien erstellen, falls etwas nicht in Ordnung ist. Wenn noch immer Probleme auftreten, können Sie die gleichen Schritte für den JRE-Ordner im JDK-Ordner Ihres PCs befolgen. Das sollte es funktionieren lassen.