Cypher

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 4e704bdf0949adefb8f9f06da74937ba760853a5
parent 0ff6b2ab3058987fa55ba3da01d8fc31bb38da32
Author: Minerva_juppiter <94231606+minerva-jupiter@users.noreply.github.com>
Date:   Tue, 28 Jun 2022 23:03:50 +0900


Diffstat:
MEncrypt.cs | 14+++++++++-----
Mtest.cs | 149++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 157 insertions(+), 6 deletions(-)

diff --git a/Encrypt.cs b/Encrypt.cs @@ -59,19 +59,21 @@ namespace Cypher int indexEnd; int indexStart; int outNumber = 0; + inNumber = 0; if (bs.Length % 100 == 0) { quotient = bs.Length / 100; //百で割り切れる場合 while (arrayNumber < 100) { - indexNumuber = Array.IndexOf(order, arrayNumber); + indexNumuber = order[arrayNumber]; indexStart = quotient * indexNumuber; indexEnd = quotient * (indexNumuber + 1); - inNumber = indexStart; - while (inNumber < indexEnd) + outNumber = indexStart; + while (outNumber < indexEnd) { encrypted[outNumber] = bs[inNumber]; + inNumber++; outNumber++; } arrayNumber++; @@ -104,8 +106,8 @@ namespace Cypher } - inNumber = indexStart; - while (inNumber < indexEnd) + outNumber = indexStart; + while (outNumber < indexEnd) { encrypted[outNumber] = bs[inNumber]; outNumber++; @@ -118,6 +120,8 @@ namespace Cypher } //書きこ File.WriteAllBytes(whereEncryptedFile, encrypted); + Test test = new(); + test.Writedate(encrypted); Console.WriteLine("Encrypt was ended."); Console.WriteLine("The date key is " + encrypted.Length + "."); Console.WriteLine("You have to remember it!"); diff --git a/test.cs b/test.cs @@ -11,8 +11,155 @@ namespace Cypher { public void test() { + //復号プログラム - } + //変数宣言 + int[] order = new int[100]; + int inNumber = 0; + + //質問 + string whereEncrypted; + string whereKeyFile; + string whereSortedFile; + string howLongDate; + + //自動テスト + whereEncrypted = @"h:\encrypted.txt"; + whereKeyFile = @"h:\key.txt"; + whereSortedFile = @"h:\sorted.txt"; + howLongDate = "390"; + + /* + Question question = new Question(); + whereEncrypted = question.Questions("Where is encrypted file?",true); + whereKeyFile = question.Questions("Where is KeyFile?",true); + whereSortedFile = question.Questions("Where will you create sorted file?",false); + howLongDate = question.Questions("How Long the date file?",false); + */ + int howLongDateInt = int.Parse(howLongDate); + + //byteのデータを長さの数だけ用意 + byte[] dates = new byte[howLongDateInt]; + byte[] sorded = new byte[howLongDateInt]; + + int quotient; + int amari; + bool multipleJudgment; + //データサイズに適した数ずつ引っこ抜く + if (howLongDateInt % 100 == 0) + { + quotient = howLongDateInt / 100; + amari = howLongDateInt % 100; + multipleJudgment = true; + } + else + { + //100で割り切れない場合は、99で割って、その余りをすべてamariにぶち込む + quotient = howLongDateInt / 99; + amari = howLongDateInt - quotient * 99; + multipleJudgment = false; + } + + //ReadkeyFile + ResdFiles resdFiles = new ResdFiles(); + order = resdFiles.ReadKeyFile(whereKeyFile); + + //Read Encrypted File + inNumber = 0; + FileStream fs = new FileStream(whereEncrypted, FileMode.Open); + byte[] encrypted = new byte[fs.Length]; + fs.Read(encrypted, 0, encrypted.Length); + fs.Close(); + Console.WriteLine("Encrypted date was readed"); + + //sort + inNumber = 0; + int arreyNumber = 0; + int indexNumber = 0; + int indexStartNumber = 0; + int indexEndNumber = 0; + int outNumber = 0; + if (multipleJudgment) + { + //100で割り切れないとき + while (arreyNumber < 100) + { + //参照すべき番号を検索 + indexNumber = Array.IndexOf(order, arreyNumber); + //参照始めの行 + indexStartNumber = indexNumber * quotient; + //参照終わり+1の行 + indexEndNumber = (indexNumber + 1) * quotient; + + //参照して"written"に代入 + outNumber = indexStartNumber; + while (indexNumber < indexEndNumber) + { + sorded[inNumber] = encrypted[outNumber]; + indexNumber++; + outNumber++; + } + Console.WriteLine(arreyNumber); + arreyNumber++; + } + } + else + { + //100で割り切れない数の場合 + //余りの位置を特定 + int whereAmari = Array.IndexOf(order, 99); + + while (arreyNumber < 100) + { + indexNumber = Array.IndexOf(order, arreyNumber); //inNumber 80 + //indexNumberとamariの関係で場合分け + if (indexNumber < whereAmari) + { + //indexNumberがamariの方が小さいとき。 + indexStartNumber = indexNumber * quotient; + indexEndNumber = (indexNumber + 1) * quotient; + } + else if (indexNumber == whereAmari) + { + indexStartNumber = indexNumber * quotient; + indexEndNumber = indexNumber * quotient + amari; + } + else + { + indexStartNumber = (indexNumber - 1) * quotient + amari; + indexEndNumber = indexNumber * quotient + amari; + } + outNumber = indexStartNumber; + while (outNumber < indexEndNumber) + { + sorded[inNumber] = encrypted[outNumber]; + outNumber++; + inNumber++; + } + Console.WriteLine(arreyNumber); + arreyNumber++; + } + } + Console.WriteLine("The date was sorted."); + Writedate(sorded); + + + //データを元の長さに整理 + //ファイルサイズが100以下の場合 + if (howLongDateInt < 100) + { + Array.Copy(sorded, 0, dates, 0, 100 - howLongDateInt); + } + else + { + dates = sorded; + } + + //書きこ + File.WriteAllBytes(whereSortedFile, dates); + + + } public void Writedate(byte[] date) {