c#凯撒密码字母表枚举到字符串

时间:2014-10-15 01:09:42

标签: c# encryption enums

我正在制作一个控制台应用程序,加密样式ceasar中的消息增加了5个字母,但我只能加密消息1个字母的2个或更多不能得到错误 我想像我一样加密超过2个字母的句子吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Cesar
{
    enum letras { 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, 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, };
class Cesar 
{
    public static void Main()
    {
        int op = 0, res;
        while (true)
        {
            Console.WriteLine("Cifrar un mensaje [1]\n" + "Descifrar un mensaje [2]\n" + "Sair [3]\n");
            res = Convert.ToInt32(Console.ReadLine());
            op = res;
            Cesar cift = new Cesar();
            if (res == 1)
            {
                Cesar.cifrar();
            }
            if (res == 2)
            {
                Cesar.descifrar();
            }
            if (res == 3)
            {
                Console.In.Close();
                break;
            }
            else
            {
                Console.WriteLine("Escribe un numero del 1 al 3");
                Console.ReadLine();
            }
        }
    }
    public static void cifrar()
    {
        Console.WriteLine("Escribe el mensaje");
        string letra = Console.ReadLine();
        letras l = (letras)Enum.Parse(typeof(letras), letra);
        Console.WriteLine("Cifrado: " + (l + 5));
        Console.ReadLine();
    }
    public static void descifrar()
    {
        Console.WriteLine("Escribe el cifrado");
        string letra = Console.ReadLine(); ;

        letras l = (letras)Enum.Parse(typeof(letras), letra);
        Console.WriteLine("Descifrado: " + (l - 5));
        Console.ReadLine();
    } 

}

2 个答案:

答案 0 :(得分:0)

您可能超出了定义的枚举范围。您需要创建一个循环添加。

public static void cifrar()
{
    Console.WriteLine("Escribe el mensaje");
    string letra = Console.ReadLine();
    letras l = (letras)Enum.Parse(typeof(letras), letra);
    Console.WriteLine("Cifrado: " + ((l + 5) % 53)); //Use the modulus operator to prevent going beyond the end of the enum
    Console.ReadLine();
}

public static void descifrar()
{
    Console.WriteLine("Escribe el cifrado");
    string letra = Console.ReadLine(); ;

    letras l = (letras)Enum.Parse(typeof(letras), letra);
    int di = ((int)l) - 5; //Move back 5 letters
    if(di < 0) di = 53 + di; //We moved to a negative number, circle back to the end

    Console.WriteLine("Descifrado: " + ((letras)di));
    Console.ReadLine();
} 

答案 1 :(得分:0)

        public static void cifrar()
    {
        Console.WriteLine("Escribe el mensaje");
        string letra = Console.ReadLine();

        letras l = (letras)Enum.Parse(typeof(letras), letra);
        int di = ((int)l) + 5;
        if (di > 53) di = ((int)l) - 49; 

        Console.WriteLine("Cifrado: " + ((letras)di));
        Console.ReadLine();
    }
    public static void descifrar()
    {
        Console.WriteLine("Escribe el cifrado");
        string letra = Console.ReadLine(); ;

        letras l = (letras)Enum.Parse(typeof(letras), letra);
        int di = ((int)l) - 5; 
        if (di < 0) di = ((int)l) + 49; 

        Console.WriteLine("Descifrado: " + ((letras)di));
        Console.ReadLine();
    }