commit 86e3f6b38747b00c9f3de50714e74f68da2b7057
parent 812e525a9909d67e4a360dae934a3f8f3f749f08
Author: Minerva_juppiter <94231606+minerva-jupiter@users.noreply.github.com>
Date: Sat, 25 Jun 2022 22:58:14 +0900
Diffstat:
| M | Encrypt.cs | | | 14 | ++------------ |
| M | Program.cs | | | 231 | +++---------------------------------------------------------------------------- |
| A | Question.cs | | | 34 | ++++++++++++++++++++++++++++++++++ |
| A | ReadKeyFile.cs | | | 12 | ++++++++++++ |
| A | ResdFiles.cs | | | 27 | +++++++++++++++++++++++++++ |
| A | SortProgram.cs | | | 171 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| M | test.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++;
+ }
}
}
}