2017-12-24 16 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 길이까지갑니다. '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