【问题标题】:C# simple custom encryptingC# 简单的自定义加密
【发布时间】:2012-02-22 08:11:07
【问题描述】:

我正在 C#.NET 中进行简单的自定义加密,加密成功通过,但解密出错。该算法非常直观,但我不知道为什么它解密错误。 这是我的代码:

 private void button1_Click(object sender, RoutedEventArgs e)
        {
            //Encrypting 
            byte[] initial_text_bytes = Encoding.UTF8.GetBytes(initial_text_tb.Text);
            byte[] secret_word_bytes = Encoding.UTF8.GetBytes(secret_word_tb.Text);
            byte[] encrypted_bytes = new byte[initial_text_bytes.Length];




            int secret_word_index = 0;
            for (int i=0; i < initial_text_bytes.Length; i++)
            {
                if (secret_word_index == secret_word_bytes.Length)
                {
                    secret_word_index = 0;
                }
                encrypted_bytes[i] = (byte)(initial_text_bytes[i] + initial_text_bytes[secret_word_index]);
                secret_word_index++;
            }



          //  String s = Encoding.UTF8.GetString(encrypted_bytes);
                //new String(Encoding.UTF8.GetChars(encrypted_bytes));

            text_criptat_tb.Text = Convert.ToBase64String(encrypted_bytes);


        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            //Decrypting
            byte[] initial_text_bytes = Encoding.UTF8.GetBytes(text_criptat_tb.Text);
            byte[] secret_word_bytes = Encoding.UTF8.GetBytes(secret_word_tb.Text);
            byte[] encrypted_bytes = new byte[initial_text_bytes.Length];

            int secret_word_index = 0;
            for (int i = 0; i < initial_text_bytes.Length; i++)
            {
                if (secret_word_index == secret_word_bytes.Length)
                {
                    secret_word_index = 0;
                }
                encrypted_bytes[i] = (byte)(initial_text_bytes[i] - initial_text_bytes[secret_word_index]);
                secret_word_index++;
            }
           // String s = new String(Encoding.UTF8.GetChars(encrypted_bytes));

            initial_text_tb.Text = Convert.ToBase64String(encrypted_bytes);


        }

这是我加密时得到的: 这是我解密的时候: 谢谢

【问题讨论】:

  • “我正在做一个简单的自定义加密” - 不要编写自己的加密。会有缺陷的……
  • 您似乎没有在任何地方从 base64 转换回来...
  • 米奇,这是给 uni 的实验室

标签: c# encryption


【解决方案1】:

我发现代码有四个问题。

1。您正在从初始文本中添加字节而不是秘密词。

这里:

encrypted_bytes[i] = (byte)(initial_text_bytes[i] + initial_text_bytes[secret_word_index]);

改用:

encrypted_bytes[i] = (byte)(initial_text_bytes[i] + secret_word_bytes[secret_word_index]);

2。您正在使用 Encoding.UTF8.GetBytes 尝试解码 base-64 字符串。

这里:

byte[] initial_text_bytes = Encoding.UTF8.GetBytes(text_criptat_tb.Text);

改用:

byte[] initial_text_bytes = Convert.FromBase64String(text_criptat_tb.Text);

3。您正在从初始文本中减去秘密单词的字节数。

这里:

encrypted_bytes[i] = (byte)(initial_text_bytes[i] - initial_text_bytes[secret_word_index]);

改用:

encrypted_bytes[i] = (byte)(initial_text_bytes[i] - secret_word_bytes[secret_word_index]);

4。您正在使用 Convert.ToBase64String 尝试解码 UTF-8 数据。

这里:

initial_text_tb.Text = Convert.ToBase64String(encrypted_bytes);

改用:

initial_text_tb.Text = Encoding.UTF8.GetString(encrypted_bytes);

【讨论】:

  • 非常感谢您的帮助,问候
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 2023-03-07
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多