public static string Cyphering(string openMessageBlockDuoSS, string key) { int [] blocksAfterInputWhiting = new int [4]; int [] blocksAfterOutputWhiting = new int [4]; List <string> closedMessage = new List <string>(); var subkeysArr = SubkeysGen.SubKeysGeneration(key); var XDataBlocks = StringMethods.StringToList(openMessageBlockDuoSS, XBlockLength); for (int i = 0; i < 4; i++) { blocksAfterInputWhiting[i] = Convert.ToInt32(XDataBlocks[i], 2) ^ Convert.ToInt32(subkeysArr[i], 2); } for (int round = 0; round < 16; round++) { blocksAfterInputWhiting = OneRound(blocksAfterInputWhiting, subkeysArr, round); } for (int i = 0; i < 4; i++) { blocksAfterOutputWhiting[i] = blocksAfterInputWhiting[i] ^ Convert.ToInt32(subkeysArr[i + 36], 2); closedMessage.Add(StringMethods.MyConvertToString(blocksAfterOutputWhiting[i], 2, 32)); } var resultStringDuoSS = StringMethods.ListToString(closedMessage); return(resultStringDuoSS); }
public static string Decyphering(string closedMessageBlockDuoSS, string key) { int[] blocksBeforeInputWhiting = new int[4]; Int32[] blocksBeforeOutputWhiting = new Int32[4]; List <string> openMessage = new List <string>(); var subkeysArr = SubkeysGen.SubKeysGeneration(key); var XDataBlocks = StringMethods.StringToList(closedMessageBlockDuoSS, XBlockLength); for (int i = 0; i < 4; i++) { blocksBeforeOutputWhiting[i] = Convert.ToInt32(XDataBlocks[i], 2) ^ Convert.ToInt32(subkeysArr[i + 36], 2); } for (int round = 15; round > -1; round--) { blocksBeforeOutputWhiting = OneRoundReverse(blocksBeforeOutputWhiting, subkeysArr, round); } for (int i = 0; i < 4; i++) { blocksBeforeInputWhiting[i] = blocksBeforeOutputWhiting[i] ^ Convert.ToInt32(subkeysArr[i], 2); openMessage.Add(StringMethods.MyConvertToString(blocksBeforeInputWhiting[i], 2, 32)); } var resultStringDuoSS = StringMethods.ListToString(openMessage); return(resultStringDuoSS); }
public static void LogEncrypt(string key, string openMes, string fileWay) { StringBuilder strBuild = new StringBuilder(); int[] blocksAfterInputWhiting = new int[4]; int[] blocksAfterOutputWhiting = new int[4]; List <string> closedMessage = new List <string>(); var subkeysArr = SubkeysGen.SubKeysGeneration(key); strBuild.AppendLine($"Open message block: {openMes};"); strBuild.AppendLine($"Key({key.Length.ToString()}): {key};"); strBuild.AppendLine($"RoundKeys: {subkeysArr[0]};"); for (int i = 1; i < 40; i++) { strBuild.AppendLine($" {subkeysArr[i]};"); } var XDataBlocks = StringMethods.StringToList(openMes, TwofishAlgo.XBlockLength); strBuild.AppendLine(); strBuild.AppendLine($"**************************Input Whiting**************************"); strBuild.AppendLine(); for (int i = 0; i < 4; i++) { blocksAfterInputWhiting[i] = Convert.ToInt32(XDataBlocks[i], 2) ^ Convert.ToInt32(subkeysArr[i], 2); strBuild.AppendLine($"{XDataBlocks[i]} xor {subkeysArr[i]} = {StringMethods.MyConvertToString(blocksAfterInputWhiting[i], 2, 32)};"); } strBuild.AppendLine(); strBuild.AppendLine($"**************************The Main Cycle**************************"); File.AppendAllText(fileWay, strBuild.ToString()); for (int round = 0; round < 16; round++) { blocksAfterInputWhiting = OneRoundLog(blocksAfterInputWhiting, subkeysArr, round, fileWay); } strBuild.AppendLine(); strBuild.AppendLine($"**************************Output Whiting**************************"); strBuild.AppendLine(); for (int i = 0; i < 4; i++) { blocksAfterOutputWhiting[i] = blocksAfterInputWhiting[i] ^ Convert.ToInt32(subkeysArr[i + 36], 2); closedMessage.Add(StringMethods.MyConvertToString(blocksAfterOutputWhiting[i], 2, 32)); strBuild.AppendLine($"{StringMethods.MyConvertToString(blocksAfterInputWhiting[i], 2, 32)} xor {subkeysArr[i+36]} = {StringMethods.MyConvertToString(blocksAfterOutputWhiting[i], 2, 32)};"); } var resultStringDuoSS = StringMethods.ListToString(closedMessage); strBuild.AppendLine($"Closed message block: {resultStringDuoSS};"); }