Cäsar (Zeichenketten)
Schreiben Sie ein Programm, das einen Text nach dem Cäsar-AlgorithmusDie ursprüngliche Cäsar-Verschlüsselung nach Gajus Julius Cäsar (100 v. Chr. - 44 v. Chr.) verwendete den Schlüssel 3. verschlüsselt. Dabei wird zu jedem Buchstaben im Alphabet eine fixe Zahl (= Code) dazugezählt. Nach "Z" soll wieder "A" folgen. Mit der negativen Zahl als Code kann der Text wieder entschlüsselt werden.
Knacken Sie damit die Botschaft: "Hslh qhjah lza"
Achtung: Das abgebildete «Cäsar-Rad» hat nicht die gesuchte Einstellung.
0 Kommentare
3 Lösung(en)
/****************************************************************************
* <code> Caesar
* </code>
* ...
*
* @author Philipp Gressly (phi@gressly.ch) http://www.gressly.ch/schulung
* @version 0.99 -- 2004-Jan-21 08:24
*/
/* History: 2004-Jan-21 08:24 (first implementations)
*****************************************************************************/
public class Caesar{
/****************************************************************************
* <code> Caesar
* </code>
*
*
* @param
* @return
*/
/* History: 2004-Jan-21 08:24 (first implementations)
*****************************************************************************/
public Caesar(int code, String orig)
{
String crypt = "";
for(int i = 0; i < orig.length(); i++) {
char oc = orig.charAt(i); //oc: original character
boolean isCap = false;
if ('A' <= oc && oc <= 'Z') {
isCap = true;
oc = (char) (oc + 'a' - 'A');
}
if('a' <= oc && oc <= 'z') {
oc = (char) (oc + code);
int diff = 'z' - 'a' + 1;
if(oc > 'z') {
oc = (char) (oc - diff);
}
if(oc < 'a') {
oc = (char) (oc + diff);
}
}
if(isCap) {
oc = (char) (oc + 'A' - 'a');
}
crypt += "" + oc;
}
System.out.println("Crypt: " + crypt);
} // end method: Caesar
/****************************************************************************
* <code> main
* </code>
*
*
* @param
* @return
*/
/* History: 2004-Jan-21 08:24 (first implementations)
*****************************************************************************/
public static void main(String[] args)
{
if(args.length != 2) {
System.out.println("Call \nCaesar <code> <String>");
return;
}
new Caesar(Integer.parseInt(args[0]), args[1]);
} // end main
} // end class: Caesar
function caesarCipher(cipherTxt, rotation) {
cipherTxt = cipherTxt.toUpperCase();
rotation = rotation || 13;
let plain = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
// rotationsalfabet:
cipher = plain.substring(rotation) + plain.substring(0, rotation),
plainTxt = '';
for (let i = 0; i < cipherTxt.length; i++) {
// alle zeichen außer großbuchstaben einfach übernehmen
if (plain.indexOf(cipherTxt[i]) == -1) plainTxt += cipherTxt[i];
else plainTxt += plain[cipher.indexOf(cipherTxt[i])];
}
return plainTxt;
}
// alle rotationen durchlaufen und gucken, was passiert
for (let i = 1; i <= 25; i++)
console.log(caesarCipher('Hslh qhjah lza', i)); // lissalanda@gmx.at
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
// NET Core 3.x; C# 8.x
using System;
using System.Linq;
namespace CS_Aufgabe_Caesar
{
class Program
{
static void Main(string[] args)
{
var lstChar = Enumerable.Range('A', 26).Select(x => (char)x).ToList();
char GetChar(char c, int v) => lstChar.Contains(c) ? lstChar[(lstChar.IndexOf(c) + v) % 26] : c;
var arr = "Hslh qhjah lza".ToUpper().ToCharArray();
Enumerable.Range(0, 26).Select(y => string.Join("", arr.Select(x => GetChar(x, y)).ToList())).ToList().ForEach(Console.WriteLine);
}
}
}
Lösung von: Jens Kelm (@JKooP)
Verifikation/Checksumme:
Die Botschaft lautet: "Der Würfel ist geworfen." Natürlich lateinisch! Da damals nur die wenigsten Leute lesen konnten, galt das Verfahren als sicher.
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 2 |
Schwierigkeit: | Mittel |
Webcode: | kb99-fe5k |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |