2017-12-24 24 views
-3

最初は、どれがサイズ外にあるのか分かりません。そしてあなたが見ることができるように、私は配列の外側にいないように%を入れました。これは私のコードなので、幼稚な間違いで私を責めないでください。より効率的な暗号化方法のヒントをお持ちの場合は開封いたしましたインデックスは配列の境界外にあります

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

namespace encrypting 
{ 
    public partial class Form1 : Form 
    { 
    string text; 
    string key; 

    public string calcXor(string a, string b) 
    { 
     char[] charAArray = a.ToCharArray(); 
     char[] charBArray = b.ToCharArray(); 
     char[] result = new char[6]; 
     int len = 0; 




     for (int i = 0; i < a.Length; i++) 
     { 
      if (i != 0) 
       result[i] = (char) (((int)charAArray[a.Length % i]^(int)charBArray[b.Length % i])) ; //error 



     } 

     return new string(result); 
    } 

    private void Crypt() 
    { 
     char[] a; 
     int i, sizeoftext = text.Length,j=0; 
     string somestring =""; 
     string key = textBox2.Text; 
     StringBuilder sb = new StringBuilder(somestring); 
     for(i=0;i<sizeoftext-1;i++) 
     { 
      if (i == key.Length-1) 
       j = 0; 





     } 
     somestring = calcXor(text, key); 


     if (File.Exists(textBox3.Text)) ; 
     File.Create(textBox3.Text).Close(); 

     System.IO.File.WriteAllText(textBox3.Text, somestring); 



    } 

    public Form1() 
    { 

     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 

    private void label1_Click(object sender, EventArgs e) 
    { 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 


      text = File.ReadAllText(textBox1.Text); 

     Crypt(); 


    } 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     key = this.Text; 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 

      OpenFileDialog fd = new OpenFileDialog(); 

      if (fd.ShowDialog() == DialogResult.OK) 
      { 
       textBox1.Text = fd.FileName; 
      } 

    } 

    private void textBox2_TextChanged(object sender, EventArgs e) 
    { 

    } 

    private void label2_Click(object sender, EventArgs e) 
    { 

    } 

    private void button3_Click(object sender, EventArgs e) 
    { 
     FolderBrowserDialog fd = new FolderBrowserDialog(); 
     if(fd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 
      textBox3.Text = fd.SelectedPath; 
      textBox3.Text = textBox3.Text +"\\" + textBox4.Text + ".txt"; 
     } 
    } 

    private void textBox4_TextChanged(object sender, EventArgs e) 
    { 

    } 

    private void textBox3_TextChanged(object sender, EventArgs e) 
    { 

    } 
} 
} 

私を助けてください。

+0

エラーの詳細情報はありません。それはどこで起こったのですか?何も... –

+0

無関係のコードを投稿しないでください。 – Steve

+0

長さが6に制限されているので、結果の範囲外インデックスを取得していますが、上限をcharAArrayの長さとするインデクサとしてiを使用します。 charAArrayがcharBArrayよりも長い場合は、モジュロ上のオペランドの順序を入れ替えたため、範囲外のインデックスを取得します。各配列の長さを上限として使用するのではなく、現在のインデックス位置を上限としてcharAArrays lengthまで上がります。 'if(i!= 0)'ステートメントは、間違ったオペランドの順序によって引き起こされたDivideByZeroExceptionを回避するためのものです。 – ckuri

答えて

0

文字列が6文字より長い場合、次の割り当ては範囲外になります。 result[i] = (char) (((int)charAArray[a.Length % i]^(int)charBArray[b.Length % i])); // error

+0

@SoronelHaetirは、例えば2^5の結果は7であり、結果は[result]の範囲外であると言います。文字列の長さは関係ありません。 – Deolus

関連する問題