Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 01:55

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Java]Verschlüsselung mit der monoalphabetischen Substitution

Discussion on [Java]Verschlüsselung mit der monoalphabetischen Substitution within the General Coding forum part of the Coders Den category.

Closed Thread
 
Old   #1
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,228
[Java]Verschlüsselung mit der monoalphabetischen Substitution

Hallo,
da ich in der Schule Java lerne/mache bekamen wir eine Aufgabe:
Quote:
Die Klasse Verschluesselung soll ein allgemeines Substitutionsverfahren implementieren. Diese soll Verschlüsselungen nach dem Prinzip der einfachen monoalphabetischen Substitution realisieren. Dabei wird ein Geheimalphabet erstellt. Dieses muss alle erwünschten Zeichen abdecken, z.B.

Klaralphabet: a b c d e f g h i j k l m n o p q r s t u v w x y z
Geheimalphabet: U F L P W D R A S J M C O N Q Y B V T E X H Z K G I

Dieses Geheimalphabet soll als Attribut in der Klasse gespeichert werden. Die Verschlüsselung erfolgt nun so, dass der Text Buchstabe, für Buchstabe durchgegangen wird, und das aktuelle Zeichen durch den entsprechenden Buchstabe im Geheimalphabet ersetzt wird. So wird kann Hallo z.B. folgendermaßen verschlüsselt werden:

Klartext: hallo
Geheimtext: AUCCQ

Es ist üblich verschlüsselte Texte in Großbuchstaben und unverschlüsselte Texte in Kleinbuchstaben auszugeben. Es soll neben den Konstruktoren, sowie den setter- und getter-Methoden für das Attribut eine Methode verschluesseln und eine Methode entschluesseln, je mit einem Text als Parameter geben. Beide Methoden sollen den ver- bzw. entschluesselten Text zurück geben. Teste deine Klasse mit einer eigenen Testklasse.
Ich lerne zu Hause Java vor als in der Schule, das heißt arrays etc kann ich schon machen. Da wir aber in der Schule keine arrays bis jetzt gemacht haben, hat uns die lehrerin verboten, arrays zu benutzen, für die die es schon können.

Also habe ich das ohne arrays gemacht und sogar ohne Switch und tausende if´s !
Jedoch habe ich das Problem das ich den verschlüsselten Text iwie nicht entschlüsseln kann.

Hier der Code ohne Arrays:
Klasse Verschluesselung
Code:
/**
 * Eine Klasse die ein allgemeines Substitutionsverfahren implementiert.
 * Diese soll Verschlüsselungen nach dem Prinzip der einfachen monoalphabetischen Substitution realisieren. 
 * 
 * @author *****
 * @version 2011-10-05
 */
public class Verschluesselung
{
    //Attribut für das GeheimAlphabet
    private String geheimAlphabet;
    
    /**
     * Erstellt eine Verschluesselung mit dem geheimAlphabet
     */
    public Verschluesselung(String g){
        if(g.length() == 26){
            geheimAlphabet = g;
        }
        else{
            geheimAlphabet = "uflpwdrasjmconqybvtexhzkgi";
        }
    }
    /**
     * Das Wort wird mit dem geheim Alphabet verschlüsselt
     * @param ver der eingegebene Text
     * @return den verschlüsselten Text
     */
    public String verschluesseln(String ver){
        String verschluesselterText = "";
        for(int i = 0; i < ver.length(); i++){
            verschluesselterText = verschluesselterText + geheimAlphabet.charAt((int)ver.charAt(i)-97);
        }
        return verschluesselterText.toUpperCase();
    }
    /**
     * Das verschlüsselte Wort wird wieder entschlüsselt
     * @param ent das zu entschlüsselte Wort
     * @return den entschlüsselten Text
     */
    // Funktioniert nicht bzw. weiß nicht wie ich das anstellen soll
    public String entschlüsseln(String ent){
        String entschluesselterText = "";
        String x = this.verschluesseln(ent);
        for(int i = 0; i < ent.length(); i++){
            entschluesselterText = entschluesselterText + x.charAt((int)ent.charAt(i)-97);
        }
        return entschluesselterText.toLowerCase();
    }
}
Kann mir vill jemand da helfen bzw sagen wie ich den verschlüsselten Text wieder entschlüssele ? Komme da iwie nicht weiter bzw weiß ned wie ich das anstellen soll :S

Klasse VerschluesselungTest
Code:
import javax.swing.JOptionPane;
/**
 * TestKlasse zur Klasse Verschlüsselung. Eingabe wird eingelesen und diese wird verschlüsselt und
 * wieder entschlüsselt
 * 
 * @author ******
 * @version 2011-10-05
 */
public class VerschluesselungTest
{
    public static void main(String[] args){
        String wort = "hallo";
        Verschluesselung v = new Verschluesselung("uflpwdrasjmconqybvtexhzkgi");
        String x = v.verschluesseln(wort);
        String y = v.entschlüsseln(wort);
        System.out.println(wort);
        System.out.println(x);
        System.out.println(y);
    }
}

Und hier die Klasse Verschluesselung mit arrays(falls ihr mir ned glaubt das ichs nicht mit arrays kann^^):
Code:
/**
 * Das hier ist eine Klasse Verschlüsseln die die monoalphabetische Substitution anwendet
 * @author *****
 * @version 2011-10-5
 */

public class Verschluesselung { 
	private char[] geheim;

	public char[] getArray() { // getter-Methode
		return geheim;
	}
	public void setArray(char[] geheim) { // setter-Methode
		this.geheim = geheim;
	}
	/**
	 * Ein default Konstruktor der im falle das nix im Paramter steht,automatisch das Alphabet um 3 Stellen verschiebt
	 */
	public Verschluesselung () {
		int zahl = 0;
		geheim = new char [((int)'z')];	
		for(char i ='a';i<'z';i++) {
			geheim[i] = "DEFGHIJKLMNOPQRSTUVWXYZABC".charAt(zahl);
			zahl++;
		}
	}
	/**
	 * Ein Konstruktor der jeden Buchstaben des Geheimalphabets durchgecheckt und immer weiter checkt bis es zu Ende ist
	 * @param geheim das übergeben Geheimalphabet
	 */
	public Verschluesselung (String geheimniss) {
		int zahl = 0;
		geheim = new char [((int)'z')];	
		for(char i ='a';i<'z';i++) {
			geheim[i] = geheimniss.charAt(zahl);
			zahl++;
		}
	}
	/**
	 * Die Methode verschlüsseln die den Klartext in einen Geheimtext umwandelt
	 * @param eingabe der Klartext
	 * @return den verschlüsselten Text
	 */
	public String verschluesseln(String klartext) {
		klartext = klartext.toLowerCase();
		for(char i ='a';i<'z';i++) {
			klartext = klartext.replace(i,geheim[i]); // hier wird das "ursprüngliche" Alphabet durch Geheimalphabet das im [i] gespeichert ist ersetzt

		}
		return klartext;

	}
	/**
	 * Die Methode entschlüsseln die den Geheimtext in einen Klartext umwandelt
	 * @param eingabe der Geheimtext
	 * @return den Klartext
	 */
	public String entschluesseln(String geheimtext) {
		geheimtext = geheimtext.toUpperCase();
		for(char i ='a';i<'z';i++) {
			geheimtext = geheimtext.replace(geheim[i],i); // hier wird das Geheimalphabet  durch das "ursprüngliche" Aplhabet ersetzt

		}
		return geheimtext;

	}

}
Danke im vorraus das ihr euch die zeit genommen habt das durchzulesen und eventuell mir zu helfen =)
XxharCs is offline  
Old 10/05/2011, 20:35   #2
 
elite*gold: 0
Join Date: Jul 2010
Posts: 388
Received Thanks: 196
Arrays sind verboten aber Strings sind erlaubt, schlaues Lehrerchen.
SmackJew is offline  
Old 10/05/2011, 20:51   #3
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,228
Quote:
Originally Posted by SmackJew View Post
Arrays sind verboten aber Strings sind erlaubt, schlaues Lehrerchen.
Verboten/nicht erlaubt, da wirs nicht gemacht haben und es unfär gegenüber den anderen wäre~

Denkst du nach bevor du was postest ?
Entweder antworte was sinnvolles zum Thema, oder poste garnichts.
XxharCs is offline  
Old 10/05/2011, 21:04   #4
 
elite*gold: 0
Join Date: Jul 2010
Posts: 388
Received Thanks: 196
Quote:
Originally Posted by XxharCs View Post
Verboten/nicht erlaubt, da wirs nicht gemacht haben und es unfär gegenüber den anderen wäre~

Denkst du nach bevor du was postest ?
Entweder antworte was sinnvolles zum Thema, oder poste garnichts.
Den Mund verbieten lasse ich mir nicht. Schon gar nicht von 'nem 14 jährigen der nicht "fair" buchstabieren kann und seine Sätze mit 'nem Tilde beendet. Du willst hier deine Hausaufgaben gelöst haben, und dazu dann noch sowas lächerliches wie 'nen Cäsar Chiffre. Versuch's mal mit Nachdenken, oder noch besser, (da beim Nachdenken wahrscheinlich ohnehin nichts 'rauskommt), Google oder einen der vielen Hausaufgaben Dienstleister.
SmackJew is offline  
Old 10/05/2011, 22:04   #5
 
link's Avatar
 
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 454
Du solltest evtl. den Index, den du durch das Subtrahieren von 'a' berechnest, prüfen, ob er auch innerhalb der Grenzen des Strings liegst, oder halt den zu verschlüsselnden Text komplett zu LowerCase konvertieren. Mit Großbuchstaben oder Sonderzeichen würde es nämlich nicht funktionieren, einfach nur 'a' abzuziehen.
Darin liegt nämlich auch der Fehler im Entschlüsseln:
Es handelt sich um Großbuchstaben und du ziehst 'a' ab, was einen Index von unter 0 ergibt.
link is offline  
Old 10/06/2011, 02:31   #6
 
omer36's Avatar
 
elite*gold: 0
Join Date: Mar 2009
Posts: 2,317
Received Thanks: 1,255
Code:
public String entschlüsseln(String ent){
  ent = ent.toLowerCase();
  String entschluesselterText = "";
  String x = "abcdefghijklmnopqrstuvwxyz";

  for(int i = 0; i < ent.length(); i++){
      entschluesselterText = entschluesselterText + x.charAt(geheimAlphabet.indexOf( ent.charAt(i)));
  }
  return entschluesselterText;
}
und im main:
Code:
String x = v.verschluesseln(wort);
String y = v.entschlüsseln(x);    // <--
denn du willst ja das verschlüsselte wieder entschlüsseln, sonnst könntest du das "wort" ja direkt ausgeben.
omer36 is offline  
Thanks
1 User
Old 10/06/2011, 09:22   #7
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,228
Quote:
Originally Posted by omer36 View Post
Code:
public String entschlüsseln(String ent){
  ent = ent.toLowerCase();
  String entschluesselterText = "";
  String x = "abcdefghijklmnopqrstuvwxyz";

  for(int i = 0; i < ent.length(); i++){
      entschluesselterText = entschluesselterText + x.charAt(geheimAlphabet.indexOf( ent.charAt(i)));
  }
  return entschluesselterText;
}
und im main:
Code:
String x = v.verschluesseln(wort);
String y = v.entschlüsseln(x);    // <--
denn du willst ja das verschlüsselte wieder entschlüsseln, sonnst könntest du das "wort" ja direkt ausgeben.
Danke
Hab überhaupt ned gedacht das normale alphabet aufzulisten und es mit dem machen. Habe immer iwie versucht das verschlüsselte mit dem geheim alphabet zu entschlüsseln.

Für den main teil hast recht, hard failed da xD

Naja kann geclosed werden =)
XxharCs is offline  
Old 10/06/2011, 09:26   #8

 
Obilee's Avatar
 
elite*gold: 144
Join Date: May 2007
Posts: 62,459
Received Thanks: 29,541
#closed
Obilee is offline  
Closed Thread


Similar Threads Similar Threads
[JAVA Error] Could not create the java virtual machine
07/21/2013 - Technical Support - 10 Replies
Schönen Abend! Leider hat es sich aus einem unerfindlichen Grund ergeben, dass sobald ich die Minecraft.exe starten will die Errormeldung kommt. Die Tips auf Minecraft.net habe ich schon ohne Erfolg befolgt. Hoffe ihr könnt mir weiterhelfen... Mein PC:
[Java] Could not create the Java virtual machine
06/22/2011 - Minecraft - 1 Replies
hallo ihr minecraftler ^^ habe seit heute das problem das wenn ich minecraft starte original als auch cracked das diese fehlermeldung kommt: Java virtual machine Launcher Could not create the Java virtual machine
Mathe - Substitution
11/22/2010 - School & Education - 4 Replies
Kann mir das vllt jemand erklären :D? ich check da gar nichts ;)D)D lg



All times are GMT +1. The time now is 01:56.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.