Diskuze: Vysvětlení
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Snad teď to dává trochu smysl. Není to nic jiného, než pochopení ASCII tabulky. Cokoliv není jasné - ptej se.
using System;
namespace CaesarCipher
{
class Program
{
/// <summary>
/// Provádí šifrování řetězce pomocí algoritmu "Caeserova šifra".
/// </summary>
/// <param name="ch">Znak, určený k zašifrování.</param>
/// <param name="key">Celočíselná hodnota, která udává ASCII posun.</param>
/// <returns>Zašifrovaný řetězec.</returns>
public static char Cipher(char ch, int key)
{
// Jestliže dodaný argument není znak...
if (!char.IsLetter(ch))
// vrať původní argument.
return ch;
// Rozlišuj velká a malá písmena šifry a ulož jejich ASCII hodnotu.
var asciiValue = char.IsUpper(ch) ? 'A' : 'a';
// Proveď posun písmen.
// 26 značí typickou anglickou abecedu.
// Např. a se změní na b apod.
return (char)((((ch + key) - asciiValue) % 26) + asciiValue);
}
/// <summary>
/// Šifruje požadovaný řetězec.
/// </summary>
/// <param name="message">Zpráva k zašifrování.</param>
/// <param name="key">Posun písmen (ASCII hodnoty) o požadovaný celočíselný klíč.</param>
/// <returns>Dešifrovanou zprávu.</returns>
public static string Encipher(string message, int key)
{
// Výchozí zpráva je prázdna.
string encrypted = string.Empty;
// Iteruj skrz každý znak v původní zprávě.
foreach (char ch in message)
// zašifruj zprávu a proveď posun znaků v abecedě (zaměň znaky).
encrypted += Cipher(ch, key);
// Vrať zašifrovaný řetezec (zprávu).
return encrypted;
}
/// <summary>
/// Dešifruje zašifrovanou šifru.
/// </summary>
/// <param name="input">Zpráva k dešifrování.</param>
/// <param name="key">Posun písmen (ASCII hodnoty) o požadovaný celočíselný klíč.</param>
/// <returns>Dešifrovanou šifru.</returns>
public static string Decipher(string input, int key) => Encipher(input, 26 - key);
static void Main(string[] args)
{
Console.WriteLine("Zadejte retezec k zasifrovani:");
Console.WriteLine("\n");
string UserString = Console.ReadLine();
Console.WriteLine("\n");
Console.Write("Zadejte klic (ciselna hodnota): \t");
int key = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n");
Console.WriteLine("Zasifrovana data:");
string cipherText = Encipher(UserString, key);
Console.Write("\n");
Console.WriteLine(cipherText);
Console.Write("\n");
Console.WriteLine("Desifrovana data:");
string t = Decipher(cipherText, key);
Console.Write("\n");
Console.WriteLine(t);
Console.ReadKey();
}
}
}
Zobrazeno 3 zpráv z 3.