Cypher

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

commit 86e3f6b38747b00c9f3de50714e74f68da2b7057
parent 812e525a9909d67e4a360dae934a3f8f3f749f08
Author: Minerva_juppiter <94231606+minerva-jupiter@users.noreply.github.com>
Date:   Sat, 25 Jun 2022 22:58:14 +0900


Diffstat:
MEncrypt.cs | 14++------------
MProgram.cs | 231+++----------------------------------------------------------------------------
AQuestion.cs | 34++++++++++++++++++++++++++++++++++
AReadKeyFile.cs | 12++++++++++++
AResdFiles.cs | 27+++++++++++++++++++++++++++
ASortProgram.cs | 171+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtest.cs | 44++++++++++++++++++++++++++++++++++++++++++++
7 files changed, 296 insertions(+), 237 deletions(-)

diff --git a/Encrypt.cs b/Encrypt.cs @@ -40,18 +40,8 @@ namespace Cypher whereKeyFile = Question("Where is keyFile?", true); */ - //順序ファイルの読み込み - StreamReader sr = new StreamReader(whereKeyFile); - Console.WriteLine("KeyFile was readed"); - - - //配列に順序を書き込み - while (inNumber < 100) - { - order[inNumber] = int.Parse(sr.ReadLine()); - inNumber++; - } - Console.WriteLine("Order was written to int."); + ResdFiles resdFiles = new ResdFiles(); + order = resdFiles.ReadKeyFile(whereKeyFile); //ファイルの内容をすべて読み込む diff --git a/Program.cs b/Program.cs @@ -11,8 +11,9 @@ do{ static string Control() { + Question question = new Question(); string answer; - answer = Question("What do you want to do?",false); + answer = question.Questions("What do you want to do?",false); if(answer == "help") { Console.WriteLine("createKey is creating keyFile for Cryptography."); @@ -35,7 +36,8 @@ static string Control() { if(answer == "sort") { - sort(); + SortProgram sortProgram = new SortProgram(); + sortProgram.sort(); } else { @@ -50,201 +52,10 @@ static string Control() return answer; } - -static string Question(string text,bool exsis) -{ - Console.WriteLine(text); - string answer = Console.ReadLine(); - if (exsis) - { - while(answer == null | File.Exists(answer) == false) - { - Console.WriteLine("You have not typed anything or you are specifying a file that does not exist"); - answer = Console.ReadLine(); - } - } - else - { - while (answer == null) - { - Console.WriteLine("Plese type anything"); - answer = Console.ReadLine(); - } - } - return answer; -} - -static void sort() -{ - //復号プログラム - - //変数宣言 - int[] order = new int[100]; - string[] written = new string[100]; - string writtens; - 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"; - - /* - whereEncrypted = Question("Where is encrypted file?",true); - whereKeyFile = Question("Where is KeyFile?",true); - whereSortedFile = Question("Where will you create sorted file?",false); - howLongDate = Question("How Long the date file?",false); - */ - int howLongDateInt = int.Parse(howLongDate); - - //byteのデータを長さの数だけ用意 - byte[] dates = new byte[howLongDateInt]; - string[] encrypted = new string[howLongDateInt]; - string[] sorded = new string[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; - } - - //順序ファイルの読み込み - StreamReader sr = new StreamReader(whereKeyFile); - - inNumber = 0; - //配列に順序を読み込み - while (inNumber < 100) - { - order[inNumber] = int.Parse(sr.ReadLine()); - Console.WriteLine(inNumber); - inNumber++; - } - Console.WriteLine("key file was readed"); - - - //順番にデータを移行 - inNumber = 0; - //encrypted の読み込み - StreamReader streamReader = new StreamReader(whereEncrypted); - inNumber = 0; - while(inNumber < howLongDateInt) - { - encrypted[inNumber] = streamReader.ReadLine(); - Console.WriteLine(inNumber); - inNumber++; - } - streamReader.Close(); - Console.WriteLine("Encrypted date was readed"); - - inNumber = 0; - int arreyNumber = 0; - int indexNumber = 0; - int indexStartNumber=0; - int indexEndNumber=0; - if (multipleJudgment) - { - //100で割り切れないとき - while (arreyNumber < 100) - { - //参照すべき番号を検索 - indexNumber = Array.IndexOf(order, arreyNumber); - //参照始めの行 - indexStartNumber = indexNumber * quotient; - //参照終わり+1の行 - indexEndNumber = (indexNumber + 1) * quotient; - - //参照して"written"に代入 - indexNumber = indexStartNumber; - while(indexNumber < indexEndNumber) - { - sorded[inNumber] = encrypted[indexNumber]; - indexNumber++; - inNumber++; - } - Console.WriteLine(arreyNumber); - arreyNumber++; - } - } - else - { - //100で割り切れない数の場合 - //余りの位置を特定 - int whereAmari = Array.IndexOf(order, 99); - while(arreyNumber < 100) - { - indexNumber = Array.IndexOf(order, arreyNumber); - if(indexNumber > whereAmari) - { - //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 if(indexNumber < whereAmari) - { - indexStartNumber = (indexNumber-1) * quotient + amari; - indexEndNumber = indexNumber * quotient +amari; - } - } - indexNumber = indexStartNumber; - while(indexNumber < indexEndNumber) - { - sorded[inNumber] = encrypted[indexNumber]; - indexNumber++; - inNumber++; - } - Console.WriteLine(arreyNumber); - arreyNumber++; - } - } - Console.WriteLine("The date was sorted."); - - //sortedを一つに統合 - writtens = string.Concat(sorded); - - //データを元の長さに整理 - //ファイルサイズが100以下の場合 - if (howLongDateInt < 100) - { - dates = Encoding.GetEncoding("UTF-8").GetBytes(string.Concat(new ArraySegment<string>(written, 0, howLongDateInt))); - } - else - { - dates = Encoding.GetEncoding("UTF-8").GetBytes(writtens); - } - - //書きこ - File.WriteAllBytes(whereSortedFile, dates); - -} - static void createKey() { - string whereKeyFile = Question("Where will you want to create the keyFile?",false); + Question question = new Question(); + string whereKeyFile = question.Questions("Where will you want to create the keyFile?",false); //順序ファイルの生成 int random; int count = 1; @@ -276,32 +87,3 @@ static void createKey() streamWriter.Close(); } -static void CreateDate() -{ - /* - string whereCreateDateFile = Question("where do you want to create test date file?", false); - int[] date = new int[100]; - for(int i = 0; i < date.Length; i++) - { - date[i] = i; - } - StreamWriter streamWriter = new StreamWriter(whereCreateDateFile); - for(int i = 0; i < date.Length; i++) - { - streamWriter.WriteLine(date[i]); - } - streamWriter.Close(); - */ - - -} - -static void Writedate(string[] date) -{ - int inNumber = 0; - while(inNumber < date.Length) - { - Console.WriteLine(date[inNumber]); - inNumber++; - } -}- \ No newline at end of file diff --git a/Question.cs b/Question.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cypher +{ + internal class Question + { + public string Questions(string text, bool exsis) + { + Console.WriteLine(text); + string answer = Console.ReadLine(); + if (exsis) + { + while (answer == null | File.Exists(answer) == false) + { + Console.WriteLine("You have not typed anything or you are specifying a file that does not exist"); + answer = Console.ReadLine(); + } + } + else + { + while (answer == null) + { + Console.WriteLine("Plese type anything"); + answer = Console.ReadLine(); + } + } + return answer; + } + } +} diff --git a/ReadKeyFile.cs b/ReadKeyFile.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cypher +{ + internal class ReadKeyFile + { + } +} diff --git a/ResdFiles.cs b/ResdFiles.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cypher +{ + internal class ResdFiles + { + public int[] ReadKeyFile(string whereKeyFile) + { + int[] order = new int[100]; + int inNumber = 0; + //順序ファイルの読み込み + StreamReader sr = new StreamReader(whereKeyFile); + //配列に順序を読み込み + while (inNumber < 100) + { + order[inNumber] = int.Parse(sr.ReadLine()); + inNumber++; + } + Console.WriteLine("key file was readed"); + return order; + } + } +} diff --git a/SortProgram.cs b/SortProgram.cs @@ -0,0 +1,171 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cypher +{ + internal class SortProgram + { + public void sort() + { + //復号プログラム + + //変数宣言 + int[] order = new int[100]; + string[] written = new string[100]; + string writtens; + 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]; + string[] encrypted = new string[howLongDateInt]; + string[] sorded = new string[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; + } + + ResdFiles resdFiles = new ResdFiles(); + order = resdFiles.ReadKeyFile(whereKeyFile); + + //順番にデータを移行 + inNumber = 0; + //encrypted の読み込み + StreamReader streamReader = new StreamReader(whereEncrypted); + inNumber = 0; + while (inNumber < howLongDateInt) + { + encrypted[inNumber] = streamReader.ReadLine(); + Console.WriteLine(inNumber); + inNumber++; + } + streamReader.Close(); + Console.WriteLine("Encrypted date was readed"); + + inNumber = 0; + int arreyNumber = 0; + int indexNumber = 0; + int indexStartNumber = 0; + int indexEndNumber = 0; + if (multipleJudgment) + { + //100で割り切れないとき + while (arreyNumber < 100) + { + //参照すべき番号を検索 + indexNumber = Array.IndexOf(order, arreyNumber); + //参照始めの行 + indexStartNumber = indexNumber * quotient; + //参照終わり+1の行 + indexEndNumber = (indexNumber + 1) * quotient; + + //参照して"written"に代入 + indexNumber = indexStartNumber; + while (indexNumber < indexEndNumber) + { + sorded[inNumber] = encrypted[indexNumber]; + indexNumber++; + inNumber++; + } + Console.WriteLine(arreyNumber); + arreyNumber++; + } + } + else + { + //100で割り切れない数の場合 + //余りの位置を特定 + int whereAmari = Array.IndexOf(order, 99); + while (arreyNumber < 100) + { + indexNumber = Array.IndexOf(order, arreyNumber); + if (indexNumber > whereAmari) + { + //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 if (indexNumber < whereAmari) + { + indexStartNumber = (indexNumber - 1) * quotient + amari; + indexEndNumber = indexNumber * quotient + amari; + } + } + indexNumber = indexStartNumber; + while (indexNumber < indexEndNumber) + { + sorded[inNumber] = encrypted[indexNumber]; + indexNumber++; + inNumber++; + } + Console.WriteLine(arreyNumber); + arreyNumber++; + } + } + Console.WriteLine("The date was sorted."); + + //sortedを一つに統合 + writtens = string.Concat(sorded); + + //データを元の長さに整理 + //ファイルサイズが100以下の場合 + if (howLongDateInt < 100) + { + dates = Encoding.GetEncoding("UTF-8").GetBytes(string.Concat(new ArraySegment<string>(written, 0, howLongDateInt))); + } + else + { + dates = Encoding.GetEncoding("UTF-8").GetBytes(writtens); + } + + //書きこ + File.WriteAllBytes(whereSortedFile, dates); + + } + } +} diff --git a/test.cs b/test.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Cypher; namespace Cypher { @@ -61,7 +62,50 @@ namespace Cypher fs.Close(); Console.WriteLine("Date was readed to byte."); + //ここまでテスト完了 + //順序入れ替え + + + + } + + + public void Writedate(byte[] date) + { + int inNumber = 0; + while (inNumber < date.Length) + { + Console.WriteLine(date[inNumber]); + inNumber++; + } + } + + public void CreateTestDate() + { + Question question = new Question(); + string whereCreateDateFile = question.Questions("where do you want to create test date file?", false); + int[] date = new int[100]; + for (int i = 0; i < date.Length; i++) + { + date[i] = i; + } + StreamWriter streamWriter = new StreamWriter(whereCreateDateFile); + for (int i = 0; i < date.Length; i++) + { + streamWriter.WriteLine(date[i]); + } + streamWriter.Close(); + } + + public void Writedate(string[] date) + { + int inNumber = 0; + while (inNumber < date.Length) + { + Console.WriteLine(date[inNumber]); + inNumber++; + } } } }