C#如何在每个循环中创建一个var + 1

时间:2018-01-23 18:00:26

标签: c# loops encryption

我在为学校制作加密程序时遇到问题。例外的是,使加密程序能够将诸如“.txt”文件之类的纯文本加密到个人密码。就我而言,这是我的生日“0811200” 因此,举个例子,你的句子以“a”开头,加密的字符应该是“a”,因为我个人密码中的第一个零表示字母表中的零步,8表示alfabet中的8个步骤,依此类推。

我已经进行了加密,但这只能用于文本的前8个字符,所以我的问题是。我可以循环整个代码,以便我可以解密我的文本吗?在下面的图片中,您可以看到我的意思!

https://imgur.com/a/RlQz0

以下是我已经拥有的代码:

private void button2_Click(object sender, EventArgs e)
{
  button3.Enabled = true;
  {
      foreach (char a in textBox1.Text.Substring(0, 1))
      foreach (char b in textBox1.Text.Substring(1, 1))
      foreach (char c in textBox1.Text.Substring(2, 1))
      foreach (char d in textBox1.Text.Substring(3, 1))
      foreach (char z in textBox1.Text.Substring(4, 1))
      foreach (char f in textBox1.Text.Substring(5, 1))
      foreach (char g in textBox1.Text.Substring(6, 1))
      foreach (char h in textBox1.Text.Substring(7, 1))
      {
          char encrypted1 = (char)(a + 0);
          textBox2.Text += encrypted1.ToString();
          char encrypted2 = (char)(b + 8);
          textBox2.Text += encrypted2.ToString();
          char encrypted3 = (char)(c + 1);
          textBox2.Text += encrypted3.ToString();
          char encrypted4 = (char)(d + 1);
          textBox2.Text += encrypted4.ToString();
          char encrypted5 = (char)(z + 2);
          textBox2.Text += encrypted5.ToString();
          char encrypted6 = (char)(f + 0);
          textBox2.Text += encrypted6.ToString();
          char encrypted7 = (char)(g + 0);
          textBox2.Text += encrypted7.ToString();
          char encrypted8 = (char)(h + 0);
          textBox2.Text += encrypted8.ToString();
      }
  }
}

private void button3_Click(object sender, EventArgs e)
{
  foreach (char a in textBox2.Text.Substring(0, 1))
  foreach (char b in textBox2.Text.Substring(1, 1))
  foreach (char c in textBox2.Text.Substring(2, 1))
  foreach (char d in textBox2.Text.Substring(3, 1))
  foreach (char z in textBox2.Text.Substring(4, 1))
  foreach (char f in textBox2.Text.Substring(5, 1))
  foreach (char g in textBox2.Text.Substring(6, 1))
  foreach (char h in textBox2.Text.Substring(7, 1))
  {
      char encrypted1 = (char)(a - 0);
      textBox3.Text += encrypted1.ToString();
      char encrypted2 = (char)(b - 8);
      textBox3.Text += encrypted2.ToString();
      char encrypted3 = (char)(c - 1);
      textBox3.Text += encrypted3.ToString();
      char encrypted4 = (char)(d - 1);
      textBox3.Text += encrypted4.ToString();
      char encrypted5 = (char)(z - 2);
      textBox3.Text += encrypted5.ToString();
      char encrypted6 = (char)(f - 0);
      textBox3.Text += encrypted6.ToString();
      char encrypted7 = (char)(g - 0);
      textBox3.Text += encrypted7.ToString();
      char encrypted8 = (char)(h - 0);
      textBox3.Text += encrypted8.ToString();
  }
}

3 个答案:

答案 0 :(得分:1)

摆脱所有那些奇怪的循环。您想循环输入文本,然后根据它的位置更改字符:

//Encoding:
string passwd = "08112000";
int pos = 0;
string result = string.Empty;
foreach(char c in textBox1.Text)
{
    result += ((char)(c - passwd[pos % passwd.Length])).ToString();
    pos++;
}
textBox2.Text = result;

通过模数(%),您始终从0迭代到passwd.Lenght - 1以采取正确的#34;加密"信。

(一般来说,最好使用StringBuilder或连接而不是result +=,但在这种情况下,它是微观优化。

您可以使用LINQ缩短此代码:

string passwd = "08112000";
textBox2.Text = new String(textBox1.Text.Select((c, index) => (char)(c - passwd[index % passwd.Length])).ToArray());

答案 1 :(得分:0)

那些循环很奇怪。我想你只想要

textBox3.Test = "";
foreach(char c in textBox1.Text)
{
     char encrypted1 = (char)(c - 0);
     textBox3.Text += encrypted1.ToString();
}

单独的问题是这是否是正确的“加密”机制,但至少代码是可读的。它将处理任何长度

答案 2 :(得分:0)

您可以使用一些var $clipboard = $('#clipboard'); $clipboard.on('click',function(e){ var img = document.createElement('img'); img.src = canvas.toDataURL('image/jpeg', 0.1); var div1 = document.createElement('div'); div1.contentEditable = true; div1.appendChild(img); document.body.appendChild(div1); SelectText(div1); try { var successful = document.execCommand('copy'); var msg = successful ? 'successful' : 'unsuccessful'; console.log('Copying text command was ' + msg); } catch (err) { console.log('Oops, unable to copy'); } document.body.removeChild(div1); }); function SelectText(element) { var doc = document; if (doc.body.createTextRange) { var range = document.body.createTextRange(); range.moveToElementText(element); range.select(); } else if (window.getSelection) { var selection = window.getSelection(); var range = document.createRange(); range.selectNodeContents(element); selection.removeAllRanges(); selection.addRange(range); } } 代码执行此操作:

linq