Permutation, Verschlüsselung

valentina2013

Bekanntes Mitglied
Hallo,

ich habe folgede Aufgabe zu lösen
Wir betrachten ein einfaches Verfahren zur Ver- und Entschlüsselung von Nachrichte. Die zu verschlüsselnde Nachricht sei gegeben durch eine Folge x=x0,x1,...xm-1 von m natürlichen Zahlen zwischen 0 und n-1. Wir verschlüsseln diese Nachricht x, indem wir eine Permutation pi benutzen, dei jedem Wert i E{0,1,...n-1} einen neuen Wert pi(i) E {0,1,...n-1} zuordent.
Durch diese Permutation wird jedes Folgenglied x i auf ein neues Folgenglied yi abgebildet und es entsteht die verschlüsselte Nachricht y=y0,y1,....ym-1

a) Wie lässt sich die Permutation pi in geigneten Weise speichern?
b)Schreiben Sie eine Java-Funktion, die für eine gegebene Permutation pi eine Nachricht x verschlüsselt
c) Schreiben Sie eine Java-Funktio, die bei bekannter Permutation pi, aus de verschlüsselten Nachricht y die Originalnachricht x zurückgewinnt. Die Laufzeit sollte linear in n+m sein und auf keinen Fall n*n betragen.
:


Habe ganze Weile gegoogelt und bin nicht wirklich vorangekommen. Mir würde es sehr helfen wenn ihr wenn auch nur stichpunktweise wertvolle tipps geben könnt.
 

Anti-Banane2

Gesperrter Benutzer
alleine schon die aufgaben-stellung verrät das deren autor kein plan von java hat : in java gibt es keine funktionen ... sondern nur methoden
 

nvidia

Bekanntes Mitglied
naja so sicher wäre ich nicht-funktionen haben einen rückgabewert,methoden nicht,also es gibt beide.

Pascal war, denke ich, die letzte Sprache die diese Unterscheidung explizit getroffen hat. Innerhalb "moderner" Sprachen ist diese Unterscheidung nicht mehr vorhanden.

Wenn du also während des Unterrichts einen Unterschied zwischen Methoden/Funktionen, nach deiner Definition, gelehrt bekommst, dann muss du diese Information in den Kontext der verwendeten Programmiersprache übertragen.

In der Java-Welt wird bei obiger Definition keine Unterscheidung getroffen, das wird dann alles als Methode bezeichnet. Nachlesen kann man das in der Java-Sprachspezifikation. In der C++ Welt gibt es dann nur noch Funktionen und je nach Kontext heissten die z.B. "member function", was das Äquivalent zur Methode eines Objekts in der Java-Welt ist.

D.h. also, wenn du eine Java-Aufgabe im Unterricht bekommst und dort ist von Funktionen die Rede dann werden daraus in der Java-Terminologie Methoden mit Rückgabewerten.
 

Tobse

Top Contributor
Um dem TO mal zu helfen anstadt nur die Aufgabenstellung anzukreiden:

Schau dir mal die Cäsar-Verschlüsselung an. Die Lässt sich Mathematisch wie folgt ausdrücken:

Code:
Nachricht-Buchstabe: m
Verschlüsselter Nachricht-Buchstabe: c
Schlüssel: k

c = (m + k) mod 26
m' = (c - k + 26) mod 26

Die Verschlüsselung welche du für deine Aufgabe implementieren sollst, sollte von änlicher Komplexität sein (also recht einfach, moderne Verfahren sind im vergleich hierzu 100 mal komplexer).

Bevor du auch nur eine Zeile Code schreibst: Überlege dir, wie die Verschlüsselung funktionieren soll (am besten mit Papier, Stift und Taschenrechner). Wenn du dann weisst, wie du verschlüsseln willst und dass es funktioniert, versuche es zu implementieren. Bei beiden Schritten helfen wir gerne aber ohne zu wissen, wie weit du bist geht das schlecht.
 
Zuletzt bearbeitet:

njans

Top Contributor
Vielleicht hilft ja mal ein Schlagwort: Caesar-Chiffre
Wobei das hier noch etwas erweitert wird, ähnlich zur Vernam-Chiffre musst du nicht jeden Buchstaben um einen Faktor verschieben, sondern jeden Buchstaben um seinen eigenen.
 

axelf96

Mitglied
Ich glaub mit Funktion meint der Aufgabensteller sowas in der Art :)
Java:
public static void main (String[] args) {}
 
Zuletzt bearbeitet:

Tobse

Top Contributor
Ich glaub mit Funktion meint der Aufgabensteller sowas in der Art :)
Java:
public static void main (String[] args) {}

Nein. Er meint, wenn dann, sowas:

Java:
public int[] verschluesseln(int schluessel, int... nachricht);
public int[] entschluesseln(int schluessel, int... nachricht);
 

Anti-Banane2

Gesperrter Benutzer
naja so sicher wäre ich nicht-funktionen haben einen rückgabewert,methoden nicht,also es gibt beide.

BITTE WAS ?=!

welcher voll-***** hat dir denn den schrott erzählt ?

wie schon andere sagten : eine solche unterteilung gibt es nicht

in java heißt es methode
in C heißt es funktion

so hat jede sprache ihren eigenen namen dafür ... aber einen unterschied zwischen "gibt ein ergebnis zurück" und "gibt nichts zurück" ...

sorry ... aber das ist alleine schon deshalb falsch weil IMMER etwas returnt wird ... nur ist es bei einem VOID halt "nichts" ... also nur das return ohne die übergabe eines return-wertes


ich lehne mich mal weit aus dem fenster und behaupte das die person die der diesen mist erzählt hat gleiche ist die meint es gäbe in java funktionen ... was meine vorherige annahme nur noch mehr unterstricht und ich sie deshalb von "kein plan von java" auf "gar kein plan von programmierung überhaupt" ausweite



sorry .. aber wer so einen müll von sich gibt hats nich anders verdient als vor den latz zu bekommen wie schlecht er ist
 

stg

Top Contributor
Vielleicht hilft ja mal ein Schlagwort: Caesar-Chiffre
Wobei das hier noch etwas erweitert wird, ähnlich zur Vernam-Chiffre musst du nicht jeden Buchstaben um einen Faktor verschieben, sondern jeden Buchstaben um seinen eigenen.

Nein, hier ist keine Verschiebe-Chiffre gefragt, sondern es wird permutiert, sprich die Buchstaben werden "durcheinandergewürfelt".
 

njans

Top Contributor
Wenn ich jeden Buchstaben um einen eigenen Faktor verschiebe, dann erhalte ich eine Permutation, solange die Funktion, die dies erzeugt bijektiv ist. Deshalb war meine Wortwahl auch "ähnlich zur Vernam-Chiffre".

Im Nachhinein wäre der Term Permutation aber wohl tatsächlich klarer gewesen.
 

valentina2013

Bekanntes Mitglied
Danke an alle die es versucht haben mir zu helfen,

ich habe die Aufgabe soweit fertig:das Prinzip war sehr einfach: die vorgegebene Buchstaben/Zahlen bleiben erhalten (werden also nicht mit anderen Buchstaben ersetzt ) aber sie verändern ihren Ort nach der vorgegebenen permutation :)
Java:
public static void encrypt(char[] T,int []pi){
		
		char [] verschl=new char [T.length];
		
		String wort=T.toString();
		
		for(int i=T.length-1;i>=0;i--){
			verschl[i]=wort.charAt(pi[i]);
		}
 

Tobse

Top Contributor
Wie genau stellst du dir [c]pi[/c] vor? So?
Java:
int[] pi = new int[]{3, 1, 4, 1, 5, 9 , 2, 6 ...};
Wenn ja verschlüsselst du nur die ersten 10 Zahlen. Die Anderen bleiben exakt gleich. Das ist nicht gefragt.
 

valentina2013

Bekanntes Mitglied
wie kommst du denn auf 10 zahlen?
Java:
public static void main(String[] args) {

		char[] T = { 'K', 'L', 'A', 'U', 'S', 'U', 'R' };

		int[] pi = { 4, 5, 1, 6, 0, 2, 3 };

		encrypt(T, pi);
		
		

	}
 
Zuletzt bearbeitet:

Tobse

Top Contributor
Vergiss das, ich hab deinen Code nicht richtig gelesen, sorry.

Aber dennoch: dass [c]pi[/c] immer unterschiedliche Werte hat, ist nicht gegeben. Wie ist denn die entschlüsselungsfunktion dazu?
 

valentina2013

Bekanntes Mitglied
gerne hier:
Java:
public static void decrypt(char[] verschl, int[] pi) {

		char[] T = new char[verschl.length];
		String wort = verschl.toString();

		for (int i = verschl.length - 1; i >= 0; i--) {
			T[i] = wort.charAt(pi[i]);
		}
}

jetzt aber eine blöde Frage: ich möchte mein string zuerst unverschlüsselt und dann verschlüsselt ausgeben lasen, habe dafür diese Metode geschrieben:
Java:
public static void ausgabe(char[] T) {
		for (int i = 0; i < T.length; i++)
			System.out.print(T[i]);
		System.out.println();
	}
Java:
ausgabe(T);
gibt KLAUSUR aus aber
Java:
ausgabe(verschl);
gibt folgendes aus:d1C5[@6

Bin am zweifeln wieso funktioniert es bei erstn string und warum nicht bei dem anderen?
 

Tobse

Top Contributor
gerne hier:
Java:
public static void decrypt(char[] verschl, int[] pi) {

		char[] T = new char[verschl.length];
		String wort = verschl.toString();

		for (int i = verschl.length - 1; i >= 0; i--) {
			T[i] = wort.charAt(pi[i]);
		}
}

jetzt aber eine blöde Frage: ich möchte mein string zuerst unverschlüsselt und dann verschlüsselt ausgeben lasen, habe dafür diese Metode geschrieben:
Java:
public static void ausgabe(char[] T) {
		for (int i = 0; i < T.length; i++)
			System.out.print(T[i]);
		System.out.println();
	}
Java:
ausgabe(T);
gibt KLAUSUR aus aber
Java:
ausgabe(verschl);
gibt folgendes aus:d1C5[@6

Bin am zweifeln wieso funktioniert es bei erstn string und warum nicht bei dem anderen?

Erzähl doch keinen quatsch. Woher hat denn der Haupt-Code die verschlüsselten daten? Da fehlt ein Return-Statement.
Warum das passiert:
Code:
wort.toString();
gibt die Speicheraddresse des char[] zurück. Die wird dann durcheinandergewürfelt und zurückgegeben.

Ich habe das jetzt mal korrigiert. Aber funktionieren tuts immernoch nicht:
Java:
public class Tester {
    public static void main(String... args)
    {
        String t = "KLAUSUR";
        int[] pi = new int[] {3, 1, 4, 1, 5, 9, 2, 6};
        char[] enc = encrypt(t.toCharArray(), pi);
        
        System.out.println(new String(enc));
        System.out.println(new String(decrypt(enc, pi)));
    }
    public static char[] decrypt(char[] verschl, int[] pi) {
     
            char[] T = new char[verschl.length];
     
            for (int i = verschl.length - 1; i >= 0; i--) {
                T[i] = verschl[pi[i]];
            }
            
            return T;
    }
    
    
    public static char[] encrypt(char[] T,int []pi){
           
            char [] verschl=new char [T.length];
           
            for(int i=T.length-1;i>=0;i--){
                verschl[i]=T[pi[i]];
            }
            
            return verschl;
    }
    
    public static void ausgabe(char[] T)
    {
        for (int i = 0; i < T.length; i++)
            System.out.print(T[i]);
        System.out.println();
    }
}
Ausgabe:
Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
	at tests.Tester.encrypt(Tester.java:40)
	at tests.Tester.main(Tester.java:18)

Mit "DIE IS EINE KLAUSURAUFGABE" statt "KLAUSUR":
Code:
SI IIEESISI ETESES  SES SS S
IIIIES EEIEISSSI IIIE EIIIII
Dein entschlüsselungscode funktioniert nicht, wie ich bereits sagte. Vielleicht kommst du selbst auf die Lösung.

[EDIT]War die Aufgabenstellung nicht, eine Reihe von Zahlen zu verschlüsseln statt eine Zeichenkette?[/EDIT]
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Permutation Java Basics - Anfänger-Themen 6
S Methoden Effiziente Permutation? Guter Permutationsalgorithmus? Java Basics - Anfänger-Themen 1
N String permutation Java Basics - Anfänger-Themen 2
P Permutation Java Basics - Anfänger-Themen 7
S Überprüfen auf Permutation Java Basics - Anfänger-Themen 4
tanja Klasse Permutation Java Basics - Anfänger-Themen 3
S Permutation Rekusiv Java Basics - Anfänger-Themen 5
nadoria Permutation ohne Rekursion Java Basics - Anfänger-Themen 4
U Cäsar Verschlüsselung Java Basics - Anfänger-Themen 8
Camoflasche RSA Verschlüsselung Java Basics - Anfänger-Themen 0
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
M Verschlüsselung mit replace() Java Basics - Anfänger-Themen 35
P Cäsear verschlüsselung irgendwas passt noch nicht Java Basics - Anfänger-Themen 2
A Methoden Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 13
E Einfache Java Verschlüsselung Java Basics - Anfänger-Themen 4
N Erste Schritte JFrame Caesar-Verschlüsselung Java Basics - Anfänger-Themen 23
Y Caesar Verschlüsselung Fehler Java Basics - Anfänger-Themen 4
Ä Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 5
N Caesar Verschlüsselung Java Basics - Anfänger-Themen 2
L Interpreter-Fehler RSA Verschlüsselung Fehler Java Basics - Anfänger-Themen 2
M Erste Schritte Verschlüsselung von text Java Basics - Anfänger-Themen 21
M Erste Schritte Verschlüsselung / Login-Sicherheit Java Basics - Anfänger-Themen 8
D Eine einfache Verschlüsselung schreiben Java Basics - Anfänger-Themen 3
A Vigenere Verschlüsselung Java Basics - Anfänger-Themen 2
B RSA Verschlüsselung für Aktivierunscode Java Basics - Anfänger-Themen 7
T Array Verschlüsselung Java Basics - Anfänger-Themen 5
Z Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 1
H Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 1
S Caesar Verschlüsselung Start Hilfe Java Basics - Anfänger-Themen 4
K Symmetrische Verschlüsselung von TextArea Java Basics - Anfänger-Themen 7
U Problem mit Verschlüsselung Java Basics - Anfänger-Themen 2
C Frage zu RSA-Verschlüsselung Java Basics - Anfänger-Themen 3
Y Applet: Verschlüsselung Java Basics - Anfänger-Themen 3
H Caesar-Verschlüsselung - Was stimmt nicht? Java Basics - Anfänger-Themen 6
V Ceasar Verschlüsselung Java Basics - Anfänger-Themen 9
D Verschlüsselung mit Java Java Basics - Anfänger-Themen 8
F Problem: Verschlüsselung von String in Array Fehler Java Basics - Anfänger-Themen 2
C Verschlüsselung Java Basics - Anfänger-Themen 8
R Frage zu Cäsar - Verschlüsselung! Java Basics - Anfänger-Themen 10
I Rc4 Verschlüsselung in BlueJ Java Basics - Anfänger-Themen 18
D Verschlüsselung Java Basics - Anfänger-Themen 4
C Compiler-Fehler Verschlüsselung Java Basics - Anfänger-Themen 2
B byte-weise Verschlüsselung Java Basics - Anfänger-Themen 6
S Caesar-Verschlüsselung Problem/Frage Java Basics - Anfänger-Themen 4
D Java Password verschlüsselung Java Basics - Anfänger-Themen 6
P RSA Verschlüsselung kleines Problem Java Basics - Anfänger-Themen 5
R Verschlüsselung von String Java Basics - Anfänger-Themen 4
J Cäsar Verschlüsselung Java Basics - Anfänger-Themen 12
G Verschlüsselung und Entschlüsselung von Texten Java Basics - Anfänger-Themen 7
D Java Verschlüsselung Java Basics - Anfänger-Themen 8
O Verschlüsselung mit Cipher & Key Java Basics - Anfänger-Themen 9
A Vigenere Verschlüsselung Java Basics - Anfänger-Themen 2
K Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 1
S Hill Verschlüsselung Java Basics - Anfänger-Themen 10
A Einfache java Verschlüsselung HILFE Java Basics - Anfänger-Themen 3
W Xor-Verschlüsselung Java Basics - Anfänger-Themen 15
Y verschlüsselung Java Basics - Anfänger-Themen 10
T Frage zur Verschlüsselung (RSA) Java Basics - Anfänger-Themen 6
A Java Verschlüsselung/Cipher Java Basics - Anfänger-Themen 12
S Verschlüsselung Key Splitting Java Basics - Anfänger-Themen 2
B Again, Verschlüsselung Java Basics - Anfänger-Themen 3
M Caeser Verschlüsselung ganz einfach(nicht für mich) Java Basics - Anfänger-Themen 6
L Frage zur Verschlüsselung in java Java Basics - Anfänger-Themen 3
D Verschlüsselung Java Basics - Anfänger-Themen 4
A verschlüsselung Java Basics - Anfänger-Themen 7
G Vergleich bei MD5-Verschlüsselung Java Basics - Anfänger-Themen 3
zilti md5-Verschlüsselung? Java Basics - Anfänger-Themen 7
L Caesar-Verschlüsselung programmieren Java Basics - Anfänger-Themen 12
Lazybone Vigenere Verschlüsselung funktioniert nicht richtig Java Basics - Anfänger-Themen 8
S XOR-Verschlüsselung Java Basics - Anfänger-Themen 5
U "Einfache Verschlüsselung" Java Basics - Anfänger-Themen 17
K Verschlüsselung Java Basics - Anfänger-Themen 8
E Verschlüsselung mithilfe von Array Java Basics - Anfänger-Themen 2
S SHA? Hashcodes, Blowfish Verschlüsselung Java Basics - Anfänger-Themen 7
L Java und PGP Verschlüsselung, wie...??? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben