-1

単純な置換暗号を作成しようとすると、私のプログラムは問題なく動作しますが、数値の暗号化または復号化は行われません。コードが適切に機能するように、コードに何を追加すればよいか本当にわかりません...何かアイデアはありますか??? これは私のコードです

namespace yaba
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnEncrypt_Click(object sender, EventArgs e)
        {
            string encrypt = tboxIO.Text;
            encrypt.ToLower();


            bool tbNull = tboxIO.Text == "";

            if (tbNull)
                MessageBox.Show("There is nothing to encrypt.");

            else
            {
                char[] array = encrypt.ToCharArray();

                for (int i = 0; i < array.Length; i++)
                {
                    int num = (int)array[i];
                    if (num >= 'a' && num <= 'z')
                    {
                        num += Convert.ToInt32(tbShift.Text);
                        if (num > 'z')
                        {
                            num = num - 26;
                        }
                    }
                    else if (num >= 'A' && num <= 'Z')
                    {
                        num += Convert.ToInt32(tbShift.Text);
                        if (num > 'Z')
                        {
                            num = num - 26;
                        }
                    }
                    array[i] = (char)num;
                }
                lblIO.Text = "Encrypted Message";
                tboxIO.Text = new string(array).ToLower();
            }

            tboxIO.Copy();
        }

        private void btnDecrypt_Click(object sender, EventArgs e)
        {
            string decrypt = tboxIO.Text;
            decrypt.ToLower();

            bool tbNull = tboxIO.Text == "";

            if (tbNull)
                MessageBox.Show("There is nothing to decrypt.");

            else
            {
                char[] array = decrypt.ToCharArray();
                for (int i = 0; i < array.Length; i++)
                {
                    int num = (int)array[i];
                    if (num >= 'a' && num <= 'z')
                    {
                        num -= Convert.ToInt32(tbShift.Text);
                        if (num > 'z')
                            num = num - 26;

                        if (num < 'a')
                            num = num + 26;
                    }
                    else if (num >= 'A' && num <= 'Z')
                    {
                        num -= Convert.ToInt32(tbShift.Text);
                        if (num > 'Z')
                            num = num - 26;

                        if (num < 'A')
                            num = num + 26;
                    }
                    array[i] = (char)num;
                }
                lblIO.Text = "Decrypted Message";
                tboxIO.Text = new string(array).ToUpper();
            }

            tboxIO.Copy();
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("hehe");
        }

        private void tboxIO_MouseClick(object sender, MouseEventArgs e)
        {
            tboxIO.SelectAll();
            tboxIO.Copy();
        }

        private void tbShift_MouseClick(object sender, MouseEventArgs e)
        {
            tbShift.SelectAll();
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }


    }
}
4

3 に答える 3

1

私はあなたのコードをこのように変更しました。ToLower を使用しないでください。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        string myText = "MusLum";
        string encrypted = "";
        string decrypted = "";
        char shift = 'a';
        public Form1()
        {
            InitializeComponent();
        }

        private void Encrypt_Click(object sender, EventArgs e)
        {
            string encrypt = myText;

            bool tbNull = myText == "";

            if (tbNull)
                MessageBox.Show("There is nothing to encrypt.");

            else
            {
                char[] array = encrypt.ToCharArray();

                for (int i = 0; i < array.Length; i++)
                {
                    int num = (int)array[i];
                    if (num >= 'a' && num <= 'z')
                    {

                        num += (Convert.ToInt32(shift.ToString().ToLower()[0]) - Convert.ToInt32('a')+1);

                        if (num > 'z')
                        {
                            num = num - 26;
                        }
                    }
                    else if (num >= 'A' && num <= 'Z')
                    {
                        num += (Convert.ToInt32(shift.ToString().ToUpper()[0]) - Convert.ToInt32('A')+1);

                        if (num > 'Z')
                        {
                            num = num - 26;
                        }
                    }
                    array[i] = (char)num;
                }

                encrypted = new string(array);
            }


        }

        private void Decrypt_Click(object sender, EventArgs e)
        {
            string decrypt = encrypted;


            bool tbNull = encrypted == "";

            if (tbNull)
                MessageBox.Show("There is nothing to decrypt.");

            else
            {
                char[] array = encrypted.ToCharArray();
                for (int i = 0; i < array.Length; i++)
                {
                    int num = (int)array[i];
                    if (num >= 'a' && num <= 'z')
                    {
                        num -= (Convert.ToInt32(shift.ToString().ToLower()[0]) - Convert.ToInt32('a')+1);

                        if (num > 'z')
                            num = num - 26;

                        if (num < 'a')
                            num = num + 26;
                    }
                    else if (num >= 'A' && num <= 'Z')
                    {
                        num -= (Convert.ToInt32(shift.ToString().ToUpper()[0]) - Convert.ToInt32('A')+1);

                        if (num > 'Z')
                            num = num - 26;

                        if (num < 'A')
                            num = num + 26;
                    }
                    array[i] = (char)num;
                }

                decrypted = new string(array);
            }
        }
    }
}
于 2013-03-04T07:13:57.917 に答える
1

では、どのようなロジックで数値を暗号化ますか? それらもConvert.ToInt32(tbShift.Text)時間をシフトする必要がありますか?次に、別のものを追加して同じことを行うことができますelse if( (num >= '0' && num <= '9')+/- 26 の代わりに +/- 10 を使用)。

ただし、どれだけシフトしたいかによっては、2 回または 3 回も移動する可能性があることに注意する必要があります。tbShift.Textそして、26 以下の数字しか (!) 持つことができないことをどうにかして確認していただければ幸いです。

ただし、数字を暗号化/復号化する方法を知り、私たちに伝える必要があるため、私たちはあなたを助ける可能性さえあります.

于 2013-03-04T07:02:03.170 に答える
0

私が知る限り、あなたは大文字と小文字のみを暗号化したいと明示的に言っているので、いいえ、数字は暗号化されていません.

また、ToLowerは関数であり、結果を何にも割り当てないため、ToLowerへの呼び出しは報われません。

于 2013-03-04T06:26:47.010 に答える