Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Cäsar-Chiffre bruteforcen (Zeichenketten)

Schreibe ein Programm das alle möglichen Lösungen eines Cäsar chiffrierten Strings ausgibt.

 

Was bedeutet ''vxumxgssokxkt sginz yvgyy''?

1 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (1)

gressly 4. September 2016 07:10   reply report
Eine kurze Beschreibung der Cäsar-Chiffre finden wir im Buch "Programmieren lernen" in Aufgabe 7.7 Seite 93.

9 Lösung(en)

from sys import stdin
def brute(l):
    abc,am=[chr(a) for a in range(97,123)],[]
    bca=[abc[-1]+abc[:-1]]
    while abc!=bca:
        ll=''
        for a in [b.lower() for b in l]:
            ll+=bca[abc.index(a)] if a in abc else a
        am.append(ll+' --- a wird zu '+bca[0]);bca=bca.pop()+bca
    return am
for l in stdin:
    for a in brute(l.rstrip()): print(a)
                

Lösung von: Name nicht veröffentlicht

function decipherCaesar(str, offset) {
  var char,
      result = "";
  str = str.toUpperCase();
  for (var i = 0; i < str.length; i++) {
    char = str.charCodeAt(i);
    if (char >= 65 && char <= 90) {             // ist buchstabe von A..Z ?
      char += offset;
      if (char > 90) char -= 26;                // alphabet-rotation
      result += String.fromCharCode(char);      
    } else result += str[i];
  }
  return result;
}

var cipher = "vxumxgssokxkt sginz yvgyy";
// bruteforce
for (var x = 1; x <= 25; x++)
  console.log(x + ": " + decipherCaesar(cipher, x));

                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

chiffre = input("Chiffre: ").lower()
for i in range(26):
    ps = ""
    for c in chiffre:
        d = ord(c)+i
        if(d > 122):
            d -= 26
        elif(d == 32+i): # bei Leerzeichen
            d -= i
        ps += chr(d)
    print(ps)
                

Lösung von: Max Möckel ()

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#define ALFABET (27 - 1)
// Das Alphabet hat 27 buchstaben zum rechnen wird hier aber 26 benoetigt

using namespace std;

int buchstabenRot1(int buchstabe)
{
	switch(buchstabe)
	{
		case 'a': return 'b'; break;
		case 'b': return 'c'; break;
		case 'c': return 'd'; break;
		case 'd': return 'e'; break;
		case 'e': return 'f'; break;
		case 'f': return 'g'; break;
		case 'g': return 'h'; break;
		case 'h': return 'i'; break;
		case 'i': return 'j'; break;
		case 'j': return 'k'; break;
		case 'k': return 'l'; break;
		case 'l': return 'm'; break;
		case 'm': return 'n'; break;
		case 'n': return 'o'; break;
		case 'o': return 'p'; break;
		case 'p': return 'q'; break;
		case 'q': return 'r'; break;
		case 'r': return 's'; break;
		case 's': return 't'; break;
		case 't': return 'u'; break;
		case 'u': return 'v'; break;
		case 'v': return 'w'; break;
		case 'w': return 'x'; break;
		case 'x': return 'y'; break;
		case 'y': return 'z'; break;
		case 'z': return 'a'; break;
		case ' ': return ' '; break;
		default: return 'a'; break;
	}
}

int buchstabenRot(int welcherRot, int buchstabe)
{
	int c = buchstabe;
	for(int i = 0; i < welcherRot; i++)
	{
		c = buchstabenRot1(c);
	}
	return c;
}

int main()
{
	cout << "Bitte geben sie denn Code ein:" << endl;
	int cs[25][ALFABET];
	for(int i = 0; i < 25; i++)
	{
		cs[i][0] = getchar();
		for(int j = 0; j < ALFABET; j++)
		{
			cs[i][j] = buchstabenRot(j, cs[i][0]);
		}
	}
	for(int i = 0; i < ALFABET; i++)
	{
		cout << i + 1 << ":" << endl;
		for(int j = 0; j < 25; j++)
		{
			putchar(cs[j][i]);
		}
		cout << "\n\n\n" << endl;
	}
	cout << "Für \"vxumxgssokxkt sginz yvgyy\" ist 21 die richtige lösung:" << endl;
	cout << "programmieren macht spass" << endl;
}
                

Lösung von: Name nicht veröffentlicht

<?php
  for ($j = 0; $j < 26; $j++) {
    echo cipher('vxumxgssokxkt sginz yvgyy', $j) . PHP_EOL;
  }

  function cipher($input='', $shift=13) {
    $ergebnis = '';
    $shift = $shift % 26;
    $input = strtoupper($input);

    for ($i=0; $i < strlen($input); $i++) {
      $char = substr($input, $i, 1);

      if (ord($char) > 64 and ord($char) < 91) { //Buchstaben
        $temp = ord($char) + $shift;
        if ($temp > 90) {
          $temp = $temp - 26;
        }
        $ergebnis .= chr($temp);
      } elseif (ord($char) == 32) { //Leerzeichen
        $ergebnis .= $char;
      }
    }

    return $ergebnis;
  }
?>
                

Lösung von: Pascal Pirschel ()

public class Main {

	public static void main(String[] args) {
		String code = "vxumxgssokxkt sginz yvgyy";

		for (int i = 1; i < 26; i++) {
			System.out.print(i + ".: ");
			for (char c : code.toCharArray()) {
				System.out.print(decode(c, i));
			}
			System.out.println("");
		}
	}

	public static char decode(char c, int s) {
		char e = c;

		for (int i = 0; i < s; i++) {
			e = getNextChar(e);
		}

		return e;
	}

	public static char getNextChar(char c) {
		switch (c) {
		case 'a':
			return 'b';
		case 'b':
			return 'c';
		case 'c':
			return 'd';
		case 'd':
			return 'e';
		case 'e':
			return 'f';
		case 'f':
			return 'g';
		case 'g':
			return 'h';
		case 'h':
			return 'i';
		case 'i':
			return 'j';
		case 'j':
			return 'k';
		case 'k':
			return 'l';
		case 'l':
			return 'm';
		case 'm':
			return 'n';
		case 'n':
			return 'o';
		case 'o':
			return 'p';
		case 'p':
			return 'q';
		case 'q':
			return 'r';
		case 'r':
			return 's';
		case 's':
			return 't';
		case 't':
			return 'u';
		case 'u':
			return 'v';
		case 'v':
			return 'w';
		case 'w':
			return 'x';
		case 'x':
			return 'y';
		case 'y':
			return 'z';
		case 'z':
			return 'a';
		case ' ':
			return ' ';
		default:
			return ' ';
		}
	}
}
                

Lösung von: Linus Götz (Lichtenberg-Gymnasium Cuxhaven)

'16.10.2016 - PowerBASIC 10

#COMPILE EXE
#DIM ALL

FUNCTION PBMAIN () AS LONG

DIM strOut AS STRING
DIM strIn AS STRING
DIM zwRot AS BYTE
DIM i AS INTEGER
DIM x AS BYTE

strIn = "vxumxgssokxkt sginz yvgyy!"

FOR x = 0 TO 25
    FOR i = 1 TO LEN(strIn)
            zwRot = ASC(MID$(LCASE$(strIn), i, 1)) + x
            IF zwRot > 122 THEN zwRot -= 26 'Umbruch: Nach "z" kommt "a"
            IF zwRot <97 OR zwRot >123 THEN zwRot -= x  'nur Kleinbuchstaben ändern
            strOut += CHR$(zwRot)
    NEXT i
        strOut = strOut & $CRLF
NEXT x

MSGBOX strOut,,EXE.NAME$

END FUNCTION

                

Lösung von: Markus Sägesser (keine)

#include <iostream>
#include <vector>

using namespace std;

typedef vector<char> VDbl;

void bruteforce (VDbl code){

for (int j = 1; j <=26; j++){

    for (int i = 0; i< code.size(); i++){

        int numb = int(code[i]);

        if (numb != 32){
            if (numb + j > 122 )
                numb = numb-26;

            numb=numb+j;
            char sign = char (numb);
            cout <<sign;
        }
        else
            cout <<" ";

    }

    cout <<endl;
}
}

int main(int argc, char *argv[])
{
   cout << "Caesar-Bruteforce"<< endl;
   cout << "Eingabe des Transkripts"<<endl;
   string code;

   getline(cin, code);
   cin.ignore();
   //vxumxgssokxkt sginz yvgyy
   VDbl arr;

        for (int i = 0; i < code.size(); i++){
            arr.push_back(  ( code[i] ) );

        }

   bruteforce(arr);
}

                

Lösung von: Robert Wagnus (nix)

public class CaesarChiffre {
	public static void main(String[] args) {
		new CaesarChiffre();
	}

	public CaesarChiffre() {
		String str = "vxumxgssokxkt sginz yvgyy";

		decipherCaesar(str);
	}

	private void decipherCaesar(String str) {
		char[] alphabet = new char[27];
		// Hinterlegt den String in einem Char[]
		char[] caesar = str.toCharArray();
		int[] temp = new int[caesar.length];

		// Diese Schleife hinterlegt das Alphabet
		char a = 97;
		for (int i = 1; i < alphabet.length; i++, a++) {
			alphabet[i] = a;
		}

		// a = 1 ; b = 2 
		// caesar[1] = v ergibt temp[1] = 22
		for (int i = 0; i < caesar.length; i++) {
			for (int j = 0; j < alphabet.length; j++) {
				if (caesar[i] == alphabet[j]) {
					temp[i] = j;
				}
			}
		}

		// Die Nummerischen Werte sind in temp hinterlegt und rufen nun dass
		// Alphabet auf und werden mit jedem Durchlauf der äußeren Schleife um 1
		// erhöht
		// %26 + 1, weil alphabet[0] = NULL ist und somit " " ausgibt.
		for (int i = 0; i < alphabet.length - 1; i++) {
			for (int j = 0; j < temp.length; j++) {
                               // ueberspringt die Leerzeichen
				if (j == 13 || j == 19) {
					System.out.print(" ");
				} else {
					int k = (temp[j] + i) % 26 + 1;
					System.out.print(alphabet[k]);
				}
			}
			System.out.println();
		}
	}
}

                

Lösung von: Norman Klöber (SRH Heidelberg)

Verifikation/Checksumme:

programmieren macht spass

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 0.5
Schwierigkeit: Leicht
Webcode: dn5u-gt9e
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen