commit 4e704bdf0949adefb8f9f06da74937ba760853a5
parent 0ff6b2ab3058987fa55ba3da01d8fc31bb38da32
Author: Minerva_juppiter <94231606+minerva-jupiter@users.noreply.github.com>
Date: Tue, 28 Jun 2022 23:03:50 +0900
Diffstat:
| M | Encrypt.cs | | | 14 | +++++++++----- |
| M | test.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)
{