| Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann. |
Diskussion: kleines Verschlüsselungsprogramm im Forum Programmieraufgaben, in der Kategorie Code Kitchen; frag mich nicht warum, hab mir den quellcode auch noch nicht angeschaut ^^ aber er lässt, wenn ich "wertwert" eingeb ...
![]() |
| | #31 (permalink) |
| frag mich nicht warum, hab mir den quellcode auch noch nicht angeschaut ^^ aber er lässt, wenn ich "wertwert" eingeb (Schlüssel 4) beim decodieren von "aivxaivx" das w einfach weg... beide male | |
| | |
| | #32 (permalink) |
| Also erstmal Hi @ All bin Neu hier und das ist mein erster Post ![]() Ich hab mal die Caesar in C++ geschrieben ich hab jetzt erst angefangen deswegen gehts wahrscheinlich auch viel einfacher aber es funktioniert ![]() Edit: Ich seh gerade das es manchmal abstürzt | |
| | |
| | #33 (permalink) |
| Registriert seit: 03.11.07 ![]() Likes: 0 | Hi, ich hab das ganze noma in c++ geschrieben, man kann die Datein und den Schluessel auch als argumente über die bash / cmd mit auf den weg geben weil ich im mom noch eine grafische "Oberfläche" dazu schreib und ich habe statt dem verschieben modulo genommen aber wenn man die ^ durch + / - ersätzt leufts aufs gleiche raus. Einziges Problem ist das keine größeren datein gehen weil der long int der die datei größe "zählt" sonst platzt das muss ich noch umschreiben. //auf win getestet sollte aber uebertragbar sein Code: #include <iostream>
#include <fstream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
void replace(string& text,const string& fnd,const string& rep)
{
size_t pos = text.find(fnd);
while(pos!=string::npos)
{
text.replace(pos,pos+fnd.length(),rep);
pos = text.find(fnd,pos);
}
}
unsigned long int lof(ifstream &f){ //Length Of File
unsigned long int d;
f.seekg(0,ios::end); //Zeiger ans Ende der Datei setzen
d=f.tellg(); //Position des Zeigers auslesen
f.seekg(0,ios::beg); //Zeiger zum Anfang der Datei setzen
return(d);
}
void fencrypt(std::ifstream& srcfile,std::ofstream& dstfile,char *key,bool log, const char *datei)
{
//cout<<"void";
int keypos = 0, strpos = 0,i,f;
char buf, str[lof(srcfile)+1000000];
cout<<"while";
while(!srcfile.eof())
{
str[strpos] = srcfile.get();
strpos++;
//cout<<"sa";
}
cout<<strpos;
cout<<" bytes zu verschluesseln\n";
f=strpos;
str[strpos] = '\0'; strpos = 0;
srcfile.close();
//cout<<str[strpos+1];
i=0;
while(i<f)
{
//cout<<"while";
if(key[keypos] == '\0') keypos = 0;
buf = key[keypos];
if(log){std::cout << "Verschluessel \"" << str[strpos] << "\" mit \"" << buf <<"\": ";}
//+
str[strpos] ^= (int)buf;
if(log){std::cout << str[strpos] <<std::endl;}
dstfile.put(str[strpos]);
strpos++; keypos++;i++;
}
}
void fcrypt(std::ifstream& srcfile,std::ofstream& dstfile,char *key,bool log, const char *datei)
{
//cout<<"void";
int keypos = 0, strpos = 0,i,f;
char buf, str[lof(srcfile)+1000000];
//cout<<"while";
while(!srcfile.eof())
{
str[strpos] = srcfile.get();
strpos++;
//cout<<"sa";
}
cout<<strpos;
f=strpos;
str[strpos] = '\0'; strpos = 0;
cout<<" bytes zu verschluesseln\n";
srcfile.close();
cout<<str[strpos+1];
i=0;
while(i<f)
{
//cout<<"while";
if(key[keypos] == '\0') keypos = 0;
buf = key[keypos];
if(log){std::cout << "Entschluessel \"" << str[strpos] << "\" mit \"" << buf <<"\": ";}
//-
str[strpos] ^= (int)buf;
if(log){std::cout << str[strpos] <<std::endl;}
dstfile.put(str[strpos]);
strpos++; keypos++;i++;
}
}
int a, b, c, d, e, falsch, u;
ifstream dat_ein;
ofstream dat_aus;
string zeile, zneu, key, dat;
//char *datei;
char datei[110], adatei[110];
char ki[10000];
string ss, sc, sh;
int main (int argc, char *argv[]){
u=0;
//cout<<argc;
if(argc==4){
u=1;
strcpy (datei, argv[1]);
strcpy (adatei, argv[2]);
key=argv[3];
}
if(argc>1&&argc<4){
cout<<"Der Funktionsaufruf lautet: [datei], [ausgabedatei], [schluessel]\n";
}
if(u==0){
cout<<"Bls Datei Verschluesselung version 2.0\nc by Moritz Hpkt alle Rechte vorbehalten \n";
}
e=1;
while(e==1){
falsch=0;
if(u==0){
cout<<"1: Verschluesseln \n2: Entschluesseln\n";
cin>>a;
cout<<"datei:\n";
cin>>datei;
cout<<"ausgabe Datei (ein und ausgabe Datei dürfen nicht indentisch sein) :\n";
cin>>adatei;
}
if(strcmp(datei, adatei) == 0){
falsch=1;
}
if(falsch==0){
dat_ein.open(datei, ios::binary);
dat_aus.open(adatei, ios::binary);
if(u==0){
cout<<"key: \n";
cin>>key;
}
strcpy (ki, key.c_str());
//cout<<"char";
if(a==1){
fencrypt(dat_ein,dat_aus,ki, false, datei);
}
else
{
fcrypt(dat_ein,dat_aus,ki, false, datei);
}
cout<<"Vorgang erfolgreich ausgabe datei:\n";
cout<<adatei;
}
else
{
cout<<"Der Vorgang wurde abgebrochen, ein und ausgabe Datei stimmten ueber ein";
}
if(u==0){
cout<<"\n1: Weitere Dateien ver/entschluesseln\n0: beenden\n";
cin>>e;
}
else
{
e=0;
}
}
return 0;
} Geändert von satan92 (22.11.09 um 23:00 Uhr) |
| | |
| | #34 (permalink) |
| Registriert seit: 31.01.08 ![]() Likes: 0 | Nochmal C++^^ Code: #include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
string Klartext;
string Geheimtext;
int Verschieben;
int Auswahl;
int Laenge;
ofstream Ausgabe;
ifstream Einlesen;
string Pfad_Einlesen;
string Pfad_Ausgabe;
string Text;
cout <<"1. Verschlüßeln" << endl;
cout <<"2. Entschlüßeln" << endl;
cin >> Auswahl;
switch(Auswahl)
{
case 1:
cout <<"Geben sie den Pfad der Datei ein, die sie Verschlüßeln wollen";
cout <<"\n(z.B. E:\\Hallo.txt):\t";
cin >> Pfad_Einlesen;
Einlesen.open(Pfad_Einlesen.c_str());
while ( !Einlesen.eof() )
{ //Solange nicht das Ende der Datei(EOF) erreicht ist
Klartext.push_back( Einlesen.get() ); //Hänge an der string klartext den Buchstaben, den get() liefert an
}
cout <<"\nUnd jetzt den Pfad der Datein, wo die Verschlüßelung stehen soll: \n";
cin >> Pfad_Ausgabe;
Ausgabe.open(Pfad_Ausgabe.c_str());
cout <<"\nUm wie viele Stellen wollen sie die Buchstaben Verschieben?\n";
cin >> Verschieben;
Laenge = Klartext.length();
for(int i = 0; i <= Laenge - 1 ; i++)
{
if(i == Laenge - 1) break;
Geheimtext[i] = Klartext[i];
Geheimtext[i] += Verschieben;
}
cout <<"Jetzt kommt die Verschlüßelung: \n\n";
for(int i = 0; i <= Laenge - 1; i++)
{
cout << Geheimtext[i];
Ausgabe << Geheimtext[i] ;
}
cout << Geheimtext;
Ausgabe.close();
Einlesen.close();
break;
case 2:
cout <<"Geben sie den Pfad der Datei ein, die sie Entschlüßeln wollen";
cout <<"\n(z.B. E:\\Hallo.txt):\t";
cin >> Pfad_Einlesen;
Einlesen.open(Pfad_Einlesen.c_str());
while ( !Einlesen.eof() )
{ //Solange nicht das Ende der Datei(EOF) erreicht ist
Klartext.push_back( Einlesen.get() ); //Hänge an der string klartext den Buchstaben, den get() liefert an
}
cout <<"\nUnd jetzt den Pfad der Datein, wo die Verschlüßelung stehen soll: \n";
cin >> Pfad_Ausgabe;
Ausgabe.open(Pfad_Ausgabe.c_str());
cout <<"\nUm wie viele Stellen wollen sie die Buchstaben zurückschieben?\n";
cin >> Verschieben;
Laenge = Klartext.length();
for(int i = 0; i <= Laenge - 1 ; i++)
{
if(i == Laenge - 1) break;
Geheimtext[i] = Klartext[i];
Geheimtext[i] -= Verschieben;
}
cout <<"Jetzt kommt die Verschlüßelung: \n\n";
for(int i = 0; i <= Laenge - 1; i++)
{
cout << Geheimtext[i];
Ausgabe << Geheimtext[i] ;
}
cout << Geheimtext;
Ausgabe.close();
Einlesen.close();
break;
case 3:
cout <<"\n(z.B. E:\\Hallo.txt):\t";
cin >> Pfad_Einlesen;
Einlesen.open(Pfad_Einlesen.c_str());
while ( !Einlesen.eof() )
{ //Solange nicht das Ende der Datei(EOF) erreicht ist
Klartext.push_back( Einlesen.get() ); //Hänge an der string klartext den Buchstaben, den get() liefert an
}
cout <<"\nUnd jetzt den Pfad der Datein, wo die Verschlüßelung stehen soll: \n";
cin >> Pfad_Ausgabe;
Ausgabe.open(Pfad_Ausgabe.c_str());
Verschieben = 0;
Laenge = Klartext.length();
for(int i = 0; i <= Laenge - 1 ; i++)
{
if(i == Laenge - 1) break;
Geheimtext[i] = Klartext[i];
Geheimtext[i] -= Verschieben;
}
cout <<"Jetzt kommt die Verschlüßelung: \n\n";
for(int i = 0; i <= Laenge - 1; i++)
{
cout << Geheimtext[i];
Ausgabe << Geheimtext[i] ;
}
cout << Geheimtext;
Ausgabe.close();
Einlesen.close();
break;
}
int ENDE;
cin >> ENDE;
return 0;
} |
| | |
| | #35 (permalink) |
| Registriert seit: 22.03.08 ![]() Likes: 0 | caesar-einweg-verschlüsselung Newlines und Leerzeichen werden ignoriert. (Respektive eigentlich werden nur Newlines ignoriert, Leerzeichen werden zu "m". (13. Buchstabe des Alphabets.)) Da sag noch mal einer prel wäre linenoise! PREL!!!1 |
| | |
| | #36 (permalink) |
| Ich hab' die Cäsar-Verschlüsselung mal vor 'ner Zeit zur Übung als Klasse in C++ geschrieben. Bei 'ner Verschlüsselung ohne Schlüsselangabe wird einfach die Länge des Strings als Schlüssel genommen. Damit hab' ich mir damals Überladung von Funktionen beigebracht ![]() Cesar.h | |
| | |
| | #37 (permalink) |
| Registriert seit: 02.08.08 ![]() Likes: 0 | Zwar schon älter hier aber ich habe auch mal ein kleine, zwar nicht sehr professionelle oder umfangreiche lösung für mich gefunden (C++): Code: #include <cstdlib>
#include <iostream>
using namespace std;
void caesar(char cha[], int schlussel); // Mache caesar bekannt
int main()
{
char ch[50] = {'\0'}; // 50x leer
int key = 0;
cout << "*******************************\n";
cout << "* Caesar Schiffre by Cr4ckEye *\n"; // Ausgaben
cout << "*******************************\n\n" << endl;
cout << "Bitte geben Sie einen Text ein: ";
cin.getline(ch, 50); // Max 50 Zeichen mit Whitespace
do
{
cout << "Bitte geben Sie den Schluessel ein: ";
cin >> key;
} while(key<=0 && key>=26); // Key nicht größer als 25
cout << "\nVerschluesselt: ";
caesar(ch, key); // Ver und Entschlüsseln
cin.get(); // Halte Fenster offen
cin.get();
}
void caesar(char cha[], int schlussel)
{
for(int i=0; i<50; ++i) // Verschlüsselung
{
if(cha[i] == '\0') break; // 0 Terminator -> Ende
while(cha[i] == 32) // Whitespace ausgeben
{ cout << " "; ++i; }
cha[i] = toupper(cha[i])+schlussel; // Zu Großbuchstabe und Berechnung
cout << cha[i]; // Ausgabe
}
cout << "\n\nEntschluesselt: "; // Entschlüsselung
for(int j=0; j<50; ++j)
{
if(cha[j] == '\0') break; // 0 Terminator -> Ende
while(cha[j] == 32) // Whitespace ausgeben
{ cout << " "; ++j; }
cha[j] = cha[j]-(schlussel*2); // Konvertrierung und Berechnung (schlussel*2),
// da er vorher ja nocheinmal um den selben Schlüssel verschoben wurde.
cout << cha[j]; // Ausgabe
}
} |
| | |
| | #38 (permalink) |
| Registriert seit: 11.09.08 ![]() Likes: 0 | So hab das ganze mal als Handy-Application(JAVA ME) 13 ist der Standardkey damit kann man En- und decrypten mit nur einer Methode. Code: import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
public class CryptIt extends MIDlet implements CommandListener
{
private Display display;
private Form form = new Form("Crypt IT");
private Command crypt = new Command("Crypt", Command.SCREEN, 1);
private Command exit = new Command("Exit", Command.EXIT, 1);
private TextField textfield = new TextField("Standardkey 13:", "", 50, TextField.ANY);
public static String cryptit( String s )
{
StringBuffer ergebnis = new StringBuffer();
int key=13;
for( int i = 0; i < s.length(); i++ )
{
int c = s.charAt( i );
if ( (c >= 'A') && (c <= 'z') )
{
c += key;
if( c > 'z' )
c = 'a' + c % 'z' -1;
if( (c > 'Z') && (c < 'a') )
c = 'A' + c % 'Z' - 1;
}
ergebnis.append( (char) c );
}
return ergebnis.toString();
}
public CryptIt()
{
display = Display.getDisplay(this);
form.addCommand(exit);
form.addCommand(crypt);
form.append(textfield);
form.setCommandListener(this);
}
public void startApp()
{
display.setCurrent(form);
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
public void commandAction(Command command, Displayable displayable)
{
if (command == crypt)
{
String textin = textfield.getString();
String encrypt = cryptit(textin);
textfield.setString(encrypt);
} else if (command == exit)
{
destroyApp(false);
notifyDestroyed();
}
}
} |
| | |
| | #39 (permalink) |
| Registriert seit: 02.12.07 ![]() Likes: 0 | So ich habe nun auch mal aus Übungszwecken ein Caesar Verschlüsselungsprogramm in Java geschrieben :> Man muss eine Quell und eine Zieldatei angeben und dann wird es ja nach Wahl ver- oder entschlüsselt. Es ist noch in der Testphase daher ein wenig verbuggt , es werden manche Zeichen bei der entschlüsselung falsch interpretiert. Leider ist es auf Konsoleneben aber wenn der Code soweit in Ordnung ist werde ich mich mal an eine GUI wagen ![]() So ein kleines "Projekt" ist echt super zum üben. Sind ein paar mehr Dateien, daher Caesar.rar |
| | |
| | #40 (permalink) |
| Registriert seit: 21.04.08 ![]() Likes: 0 | Caesar & Vigenere in Python: Code: chars = [ chr(n) for n in range(65,91) ]
# Caesar
def caesar(text, shift, dec=1):
return "".join([ chars[(ord(c)-65+(dec*shift))%26] for c in text ])
# Vigenere
def encodeVigenere(text, key, dec=1, idx=0, result=""):
for c in text:
result += chars[ (ord(c)-65+(dec*chars.index(key[idx])))%26 ]
idx = (idx + 1) % len(key)
return result
if __name__ == '__main__':
print caesar("FELIX", 3)
print caesar("IHOLA", 3, -1)
print encodeVigenere("GEHEIMNIS", "AKEY")
print encodeVigenere("GOLCIWRGS", "AKEY", -1) Felix |
| | |
| | #41 (permalink) |
| Hier meine Version in ruby, sie verschlüsselt eingegebenen Text oder Files im Caesarcode, man kann eingeben, um wieviel Buchstaben verschoben werden soll. Der eingegebene Text oder der Text im File sollte in Kleinbuchstaben geschrieben sein, alles andere bleibt wie es ist, und das Ergebnis ist in Großbuchstaben, wie es bei Verschlüsselungen Standard ist. Code: class VProg
def initialize(x)
@x = x
end
def to_s
if @x == 1
textv()
elsif @x == 2
dateiv()
else
exit
end
end
private
def textv()
puts "\n\n|-----Caesar-Verschluesselung-----|"
puts "Geben Sie nun den Text in Kleinbuchstaben ein, der verschluesselt werden soll:\n\n"
text1 = gets.chomp
puts "\n\nGeben Sie ein, mit welchem Faktor der Text verschluesselt werden soll:\n\n"
faktor = gets.to_i; text2 = verschluesseln(text1, faktor)
puts text2
end
def dateiv()
puts "\n\n|-----Caesar-Verschluesselung-----|"
puts "Geben Sie nun den kompletten Pfad der Datei an, die verschluesselt werden soll:\n\n"
pfad = gets.chomp
puts "\n\nGeben Sie ein, mit welchem Faktor der Text verschluesselt werden soll:\n\n"
faktor = gets.to_i; file = open(pfad, "r"); text1 = file.read; file.close
text2 = verschluesseln(text1, faktor); file = open(pfad, "w"); file.print "#{text2}"
puts "\n\nDatei verschluesselt.\n\n"
end
def verschluesseln(text1, faktor)
a = ["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"]
b = {"a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5, "f"=>6, "g"=>7, "h"=>8, "i"=>9, "j"=>10, "k"=>11, "l"=>12, "m"=>13, "n"=>14, "o"=>15, "p"=>16, "q"=>17, "r"=>18, "s"=>19, "t"=>20, "u"=>21, "v"=>22, "w"=>23, "x"=>24, "y"=>25, "z"=>26}
text2 = text1.split(""); text1 = ""
text2.each { |part|
if b[part] != nil
text1 += a[(b[part]-1-(26-faktor))]
else
text1 += part
end
}
return text1
end
end
puts "\n\n|--------------Menue--------------|"
puts "(1) Text verschluesseln"
puts "(2) Datei verschluesseln"
puts "(3) Programm beenden\n\n"
x = gets.to_i; vprog = VProg.new(x); vprog.to_s | |
| | |
| | #42 (permalink) |
| Registriert seit: 21.04.08 ![]() Likes: 0 | und nochmal in Haskell ... Code: import Char
import List
caesar :: String -> (Int, Int) -> String
caesar [] (_, _) = []
caesar (x:xs) (shift, dec) = enc : caesar xs (shift, dec)
where
enc = [ 'A'..'Z'] !! (mod (ord x - 65 + (dec * shift)) 26)
vigenere :: String -> String -> (Int, Int) -> String
vigenere [] _ (_, _) = []
vigenere (x:xs) ks (idx, dec) = enc : vigenere xs ks (newIdx, dec)
where
alph = [ 'A'..'Z']
newIdx = mod (idx + 1) (length ks)
enc = alph !! (mod (ord x - 65 + (dec * (shift (ks !! idx, 0)))) 26)
shift (k, i) = if i > 25 then 1 else if alph !! i == k then i else shift (k, i+1)
main :: IO()
main = do
putStrLn $ "FELIX -> " ++ caesar "FELIX" (3, 1)
putStrLn $ "IHOLA -> " ++ caesar "IHOLA" (3, -1)
putStrLn $ "GEHEIMNIS -> " ++ vigenere "GEHEIMNIS" "AKEY" (0, 1)
putStrLn $ "GOLCIWRGS -> " ++ vigenere "GOLCIWRGS" "AKEY" (0, -1) Felix |
| | |
| | #43 (permalink) |
| Registriert seit: 28.03.09 ![]() Likes: 0 | python3 kann nur cäsar und kann nur eingegebenen string ver-/entschlüsseln. habe vor, dateien vielleicht in den nächsten tagen noch ein zu bauen. Code: def encode(char, str):
clear = "abcdefghijklmnopqrstuvwxyz"
cryptic = clear[clear.index(char):] + clear[:clear.index(char)]
crystr = ""
str = str.lower()
for i in str:
if i not in clear:
new = i
else:
new = cryptic[clear.index(i)]
crystr = crystr + new
return crystr
def decode(char, str):
clear = "abcdefghijklmnopqrstuvwxyz"
cryptic = clear[clear.index(char):] + clear[:clear.index(char)]
enstr = ""
str = str.lower()
for i in str:
if i not in cryptic:
new = i
else:
new = clear[cryptic.index(i)]
enstr = enstr + new
return enstr |
| | |
| | #44 (permalink) |
| Registriert seit: 14.04.06 ![]() Likes: 4 | Nochmal in Python so dass es keiner versteht Cäsar: Code: text="TEST"; key=3; print "".join([chr((ord(c)-65+key)%26+65) for c in text]) Code: text="TEST"; key="ABC"; print "".join([chr((ord(text[i])+ord(key[i%len(key)])-130)%26+65) for i in range(len(text))]) |
| | |
| | #45 (permalink) |
| Registriert seit: 14.04.09 ![]() Likes: 0 | Hier mal mein Cäsar programm in Brainfuck :Code: ,------------------------------------------------[->+<],>>>,----------[++++++++++<<[->+>+<<]>[-<+>]>.,----------] Getestet mit Brainfuck Developer. Ist vieleicht noch verbesserbar... |
| | |
![]() |
| | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Neues Verschlüsselungsprogramm (selbst gecodet) | Tec | Cryptography & Encryption | 101 | 20.07.07 11:37 |
| Verschlüsselungsprogramm | Until-Death | Code Kitchen | 5 | 01.07.07 13:34 |
| Verschlüsselungsprogramm | antcool | Cryptography & Encryption | 14 | 21.10.05 16:31 |
| Bestes Verschlüsselungsprogramm | spyro133 | Cryptography & Encryption | 2 | 20.06.05 08:09 |
| Verschlüsselungsprogramm | Avenger | Cryptography & Encryption | 5 | 22.11.04 21:59 |