kleines Verschlüsselungsprogramm

Nornagest

New member
Der Vorschlag für diese Aufgabe kam von Phuket:

Aufgabe ist es ein kleines Verschlüsselugsprogramm zu coden, das einfache Verschlüsselungsalgorithmen wie den Caesarcode und Vigenere unterstützt.

Um es etwas umfangreicher zu machen wäre es nett wenn das Programm auch Dateien verschlüsseln kann.

Viel Spaß

Nornagest


Caesar:
Jeder Buchstabe wird um eine bestimmte Anzahl von Stellen im Alphabet verschoben.
Für Schlüssel 3 wird aus A ein D.

Vigenere:
http://de.wikipedia.org/wiki/Polyalphabetische_Substitution
 

Phuket

New member
Meine erste Perl Version beherscht momentan nur Caesar Ver und Entschlüsselung.
Problem hab ich momentan nur mit dnyamischen Verschiebungswerten. Über den tr Operator lässt sich das nicht erledigen also muss ich mir was anderes einfallen lassen.
Version wird dann nachgereicht.
Alle Text basierenden Datei Typen werden eigentlich verschlüsselt hoffe ich :)

Code:
EDIT: Das wichtigste vergessen :rolleyes:
 

Johnson

New member
Ich will echt kein Spielverderber sein, aber ich hab noch Hausaufgaben auf und bin müde also mach ich das ganze für Delphi mal verbal:
Entweder (die Dumme Variante) ne Gigantische Case of Anweisung auf nen Button packen, oder (die klügere Variante) über den Ord Befehl jeden Buchstaben um x Stellen verrücken.
Morgen liefe ich evtl nen Quellcode, hab jetzt aber wie gesagt keine Zeit das abzutippen.
Case of geht übrigens sowohl für Casesar als auch Vigenere.

Edit: Okay, ord wird problematisch mit Buchstaben wie X Y oder Z wenn der Schlüssel > 3 wird. Dafür müsst man da noch ne If Klausel setzen.
 

LittleSpike

New member
Tach Leute.
Hab mal ein Prog bzw. die nötigen Funktionen in VB Geschrieben:

Wenn bei den Funktionen "Verschlüsseln"==False, wird entschlüsselt.
Einfach in ein Modul Packen:

Code:
Option Explicit

Function Vigenere(ByVal Text As String, ByVal Schlüssel As String, ByVal Verschlüsseln As Boolean)
Dim Zahl1 As Double
Dim Zahl As Double
Dim NeuerText As String
Dim Zeichen As Integer
Dim NZeichen As String


For Zahl1 = Len(Schlüssel) To Len(Text)
    Schlüssel = Schlüssel & Schlüssel
    If Len(Schlüssel) > Len(Text) Then
        Schlüssel = Mid(Schlüssel, 1, Len(Text))
    End If
Next Zahl1


For Zahl = 1 To Len(Text)

    Zeichen = Asc(Mid(Text, Zahl, 1))
    
        If Zeichen > 64 Then
            If Zeichen < 91 Then
                

                If Verschlüsseln = True Then
                Zeichen = Zeichen + (Asc(Mid(Schlüssel, Zahl, 1)) - 64)
                Else
                Zeichen = Zeichen - (Asc(Mid(Schlüssel, Zahl, 1)) - 64)
                End If
                
                If Zeichen < 65 Then
                    Zeichen = Zeichen + 26
                ElseIf Zeichen > 90 Then
                    Zeichen = Zeichen - 26
                End If
            End If
        End If
    NZeichen = Chr(Zeichen)
    NeuerText = NeuerText & NZeichen
Next Zahl

Vigenere = NeuerText
End Function

Function Caesar(ByVal Text As String, ByVal Schlüssel As Integer, ByVal Verschlüsseln As Boolean)
Dim Zahl As Double
Dim NeuerText As String
Dim Zeichen As Integer
Dim NZeichen As String
NeuerText = ""

For Zahl = 1 To Len(Text)

    Zeichen = Asc(Mid(Text, Zahl, 1))
    
        If Zeichen > 64 Then
            If Zeichen < 91 Then
                
                If Verschlüsseln = True Then
                Zeichen = Zeichen + Schlüssel
                Else
                Zeichen = Zeichen - Schlüssel
                End If
                
                If Zeichen < 65 Then
                    Zeichen = Zeichen + 26
                ElseIf Zeichen > 90 Then
                    Zeichen = Zeichen - 26
                End If
            End If
        End If
    NZeichen = Chr(Zeichen)
    NeuerText = NeuerText & NZeichen
Next Zahl

Caesar = NeuerText
End Function
@Nornagest: Kann es sein das du bei RoR mitspielst?
 

Boar

New member
Ich hab die Caesar-Chiffre für Windows in Java programmiert. Ver- und Entschlüsselung eines kurzen Textes ist möglich.

Hier ist mein Code:

Code:
/*
 * @author: Boar
 *
 * Ver- und Entschlüsselung eines Strings mit der Caesar-Chiffre
 *
 * (c) 17.11.2004
 */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Caesar extends JFrame implements ActionListener
{
  String text;
  String convText;
  int[] alphabet = new int[26];
  boolean added = false;
  int temp=0;

  JPanel up          = new JPanel();
  JLabel in          = new JLabel("Text-Eingabe:                 ",JLabel.LEFT);
  JTextField eingabe = new JTextField(20);
  
  JPanel middle1  = new JPanel();
  JLabel  info    = new JLabel ("Schlüssel: ");
  JTextField schl = new JTextField(2);
  
  JPanel middle2  = new JPanel();
  JButton verschl = new JButton("Verschlüsseln");
  JButton entschl = new JButton("Entschlüsseln");
  
  JPanel down        = new JPanel();
  JLabel out         = new JLabel("Konvertierte Ausgabe: ");
  JTextField ausgabe = new JTextField(20);
  
  public Caesar()
  {
    for (int i=0; i<26; i++)
      alphabet[i]='A'+i;
      
    this.setTitle("Caesar-Chiffre");
    this.setSize(370,180);
    this.setResizable(false);

    ausgabe.setEditable(false);
    
    up.setLayout(new FlowLayout(FlowLayout.LEFT));
    up.add(in);
    up.add(eingabe);
    
    middle1.setLayout(new FlowLayout(FlowLayout.CENTER));
    middle1.add(info);
    middle1.add(schl);
    middle1.add(verschl);
    middle1.add(entschl);
    
    down.setLayout(new FlowLayout(FlowLayout.LEFT));
    down.add(out);
    down.add(ausgabe);
    
    getContentPane().setLayout(new BoxLayout(getContentPane(),BoxLayout.Y_AXIS));
    getContentPane().add(up);
    getContentPane().add(middle1);
    getContentPane().add(down);
    
    verschl.addActionListener(this);
    entschl.addActionListener(this);
    verschl.setActionCommand("ver");
    entschl.setActionCommand("ent");
  }
  
  public void actionPerformed(ActionEvent e)
  {
    if(e.getActionCommand().equals("ver"))
    {
      ausgabe.setText("");
      convText="   ";
      text = eingabe.getText().toUpperCase().trim();
      for(int i=0; i<text.length(); i++)
      {
        added=false;
        for(int j=0; j<26; j++)
        {
          if(text.charAt(i)==(char)alphabet[j]&& !schl.getText().equals(""))
          {
            temp=text.charAt(i);
            if(temp+Integer.parseInt(schl.getText())>90)
              temp+=(Integer.parseInt(schl.getText())-26);
            else
              temp+=Integer.parseInt(schl.getText());
            convText+=(char)temp;
            added=true;
          }
          else if(added==false&&j==25&&!schl.getText().equals(""))
            convText="   ERROR: Keine Sonderzeichen!";
          else if(added==false&&j==25&&schl.getText().equals(""))
            convText="   ERROR: Kein Schlüssel angegeben!";
          ausgabe.setText(""+convText);
        }
      }
    }
    else if(e.getActionCommand().equals("ent"))
    {
      ausgabe.setText("");
      convText="   ";
      text = eingabe.getText().toUpperCase().trim();
      for(int i=0; i<text.length(); i++)
      {
        added=false;
        for(int j=0; j<26; j++)
        {
          if(text.charAt(i)==(char)alphabet[j]&& !schl.getText().equals(""))
          {
            temp=text.charAt(i);
            if(temp-Integer.parseInt(schl.getText())<65)
              temp=temp+26-Integer.parseInt(schl.getText());
            else
              temp-=Integer.parseInt(schl.getText());
            convText+=(char)temp;
            added=true;
          }
          else if(added==false&&j==25&&!schl.getText().equals(""))
            convText="   ERROR: Keine Sonderzeichen!";
          else if(added==false&&j==25&&schl.getText().equals(""))
            convText="   ERROR: Kein Schlüssel angegeben!";
          ausgabe.setText(""+convText);
        }
      }
    }
  }
  
  public static void main(String[] args)
  {
    Caesar chiffre = new Caesar();
    
    WindowQuitter wquit = new WindowQuitter();
    chiffre.addWindowListener( wquit );
    
    chiffre.setVisible(true);
  }
}

class  WindowQuitter  extends WindowAdapter
{
  public void windowClosing( WindowEvent e )
  {
    System.exit( 0 );
  }
}
PS: Bin noch ziemlicher Anfänger, bin um jeden Verbesserungsvorschlag für meinen Code froh (z.B. Programmierstil usw.)
 

HoUrGLasS

New member
...allerdings sollte man mit eigenen Verschlüsselungsprogrammen aufpassen.
Wenn irgendwo genutzt und auffällt then knast;

weil man es dem BSI melden muss
 

LittleSpike

New member
Eine Derartige Pflicht besteht nur in den USA. (ob in anderen Ländern auch, weis ich nicht. Aber eindeutig nicht in Deutschland)

mfg LittleSpike
 

Vollkorn

New member
Kleine Info zu einer Anwendung der Verschlüsselung:
Kennt jemand den Film "2001: Odysee im Weltram" ?
Der Boardcomputer des Raumschiffs in dem der Film Spielt hört auf den Namen "HAL". Wenn man jetzt hergeht und die Buchstaben mit dem Schlüssel 1 verschiebt kommt "IBM" raus.
Kewl oder!? :D

Der Computer wird als absolut Fehlerfrei beschrieben.
Zitat: "Computer der HAL 9000 Serie haben noch nie einen Fehler gemacht. Sie sind absolut Perfekt.

Am Ende dreht der Computer durch und bringt alle um, ergo werden die IBM computer alle durchdrehen und uns alle umbringen :D :D
 

LittleSpike

New member
Original von Vollkorn
Kleine Info zu einer Anwendung der Verschlüsselung:
Kennt jemand den Film "2001: Odysee im Weltram" ?
Der Boardcomputer des Raumschiffs in dem der Film Spielt hört auf den Namen "HAL". Wenn man jetzt hergeht und die Buchstaben mit dem Schlüssel 1 verschiebt kommt "IBM" raus.
Kewl oder!? :D

Der Computer wird als absolut Fehlerfrei beschrieben.
Zitat: "Computer der HAL 9000 Serie haben noch nie einen Fehler gemacht. Sie sind absolut Perfekt.

Am Ende dreht der Computer durch und bringt alle um, ergo werden die IBM computer alle durchdrehen und uns alle umbringen :D :D
Ceasar Verschlüsselung
Schlüssel 1 (A)

8)
 

mise

Member
Ich hab mal was in Python gemacht.
Man kann allerdings keine Zeichen benutzen, die bei einer ASCII-Tabelle einen höheren Dezimalwert als 127 haben benutzen. Irgendwie ist das etwas Tkinter-spezifisches beim Text() Widget (oder bloss bei mir?). ?(
Falls jemand weiss wie man das hinbekommt, bitte sagen!
Hier der Code

Edit: Hab grad gesehen, dass dieser Code auf Windows nicht (jedenfalls das ändern der Sprache) ob's bei Linux klappt, weiss ich nicht...
 

MuskelBiber

New member
hi,
Ich hab jetzt auch mal das Programm geschrieben (ich weiß is schon ne weile her das die aufgabe gestellt wurde ,ich bin aber erst vor kurzem drauf gestoßen).
Geschrieben is es komplett in C kann aber zZt. nur Caesar'isch verschlüsseln, (die Vigenere'ische hab ich auch noch vor zu implementieren)

Bis jetzt hab ich das Prog. nur auf linux getestet ,müsste aber ohne weiteres auch auf Win laufen!
Code:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[])
{
	//Variablen
	FILE* file;
	int i=0;
	int key =0;
	long file_lenght;

	//Testen ob genug Argumente übergeben wurden
	if(argc != 4)
	{
		printf("usage: %s input_file output_file key\n",argv[0]);
		return 1;
	}

	key =atoi(argv[3]);

	//Datei öffnen
	file =fopen(argv[1],"r");
	if(NULL ==file)
	{
		printf("Fehler: Konnte Datei nicht öffnen.\n");
		return 1;
	}

	//Länge der Datei rausfinden
	fseek(file,0,SEEK_END);//filepointer an das ende der Datei setzen
	file_lenght =ftell(file);//die position des fp bekommen (=Länge der datei)
	rewind(file);//fp wieder an den Anfang setzen

	char file_input[file_lenght];//char-feld mit der größe der Datei erzeugen

	//Datei lesen
	fread(file_input,sizeof(file_input),1,file);	
	fclose(file);//Datei schließen

	//Datei (zum schreiben) öffnen
	file =fopen(argv[2],"w");
	if(NULL ==file)
	{
		printf("Fehler: Datei konnte nicht geöffnet werden.\n");
		return 1;
	}

	//Text verschlüsseln und ausgeben
	for(i;i<file_lenght;i++)
	{
		fprintf(file,"%c",file_input[i]+key);
	}

	fclose(file);//datei schließen

	return 0;
}
Was haltet ihr davon?
Wenn ihr Fehler o.ä. findet bitte posten!

cya, MuskelBiber ;)
 

minzel

Stammuser
Da ich das ganze ziemlich ermüdend finde das hier nur in Basic , c , c++ ect. programmiert wird, habe ich hier eine Java-Awt Execute - Lösung. Ja, ja execute, also ein Blick lohnt sich wobei ich mich auf das nötigste Beschränkt habe.

Java - Proggie (zip)

in diesem Sinne
minzel
 

MuskelBiber

New member
Antwort:

@minzel
Hallo, ich hab mir dein Progg mal angeguckt (Da ich gerade angefangen hab mit Java zu programmieren ;)).
Ich find das Programm ganz gelungen ,bis auf ein paar einzelheiten.
Blos ich finde man sollte den Schlüssel selbst einstellen können (z.Zt. wird der Text ja immer mit 3 Codiert) und der Shortkey für "Text -> Ceasarcode (Strg+C))" scheint (bei mir) auch net zu funktionieren.

P.S: Könntest du den Quellcode zum Download bereitstellen?
 

minzel

Stammuser
Hey muskelbiber,

Danke für dein Feedback. Also das mit dem Shortcut ging bei mir auch nicht *g frag mich aber nicht wieso. vielleicht schau ich mal bei Gelegenheit noch mal rein.

das mit dem Schlüssel ist richtig, wusste nicht wie man das nennen könnte, deshalb hab ich es raus gelassen. Man kann aber mit Hilfe eines Dialoges das sicher schnell bewerkstellig.

Gerne, auch hier der Quelltext:

Quelltext: Verschlüsselung

mfg
minzel
 
Oben