public static bool stego(string txt, string fileName, string newFileName) { int noWords = WordDocument.noWords(fileName); if (noWords - 1 < txt.Length * 8) { return(false); } List <bool> msg = txtToBinary(txt); string coverString = WordDocument.returnDocument(fileName); List <char> cover = coverString.ToList(); string stegoText = ""; int j = 0; int k = 0; do { char pref = cover[k++]; if (pref == ' ') { if (msg[j]) { stegoText += pref + " "; } else { stegoText += pref; } j++; } else { stegoText += pref; } } while (k < cover.Count - 1 && j < msg.Count); if (j < msg.Count) { if (msg[j]) { stegoText += " "; } else { stegoText += " "; } } if (k < cover.Count - 1) { stegoText += coverString.Substring(k); } WordDocument.createWord(stegoText, newFileName); return(true); }
public static Dictionary <char, int> stegoHuffman(string txt, string fileName, string newFileName) { List <bool> msg = new List <bool>(); HuffmanTree huffTree = new HuffmanTree(); txt += '\0'; huffTree.build(txt); huffTree.Root.Traverse1(); List <bool> encoded = huffTree.encode(txt); foreach (bool b in encoded) { msg.Add(b); } int noWords = WordDocument.noWords(fileName); if (noWords - 1 < msg.Count) { return(null); } string coverString = WordDocument.returnDocument(fileName); List <char> cover = coverString.ToCharArray().ToList(); string stegoText = ""; int j = 0; int k = 0; do { char pref = cover[k++]; if (pref == ' ') { if (msg[j]) { stegoText += pref + " "; } else { stegoText += pref; } j++; } else { stegoText += pref; } } while (k < cover.Count - 1 && j < msg.Count); if (j < msg.Count) { if (msg[j]) { stegoText += " "; } else { stegoText += " "; } } if (k < cover.Count - 1) { stegoText += coverString.Substring(k); } WordDocument.createWord(stegoText, newFileName); return(huffTree.Frequencies); }
public static string stegoCharRet(string fileName, int[] stegoKey, string[] compressKey, List <string> table) { string toRet = ""; List <char> lista = WordDocument.returnChars(fileName); List <bool> binary = new List <bool>(); int end = 0; int bajt = 0; int i = 0; List <int> key = stegoKey.ToList(); while (i + 4 < lista.Count) { int group = 0; for (int j = 0; j < 4; j++) { int value = (int)lista[i + 1]; int n = key.IndexOf(value); if (n < 0) { break; } for (int k = group; k < n; k++) { binary.Add(false); group++; end++; bajt++; } if (group < 4) { binary.Add(true); group++; i++; end = 0; bajt++; } } while (group < 4) { binary.Add(false); group++; end++; bajt++; } i++; if (table != null) { if (binary.Count >= table.Count * 2) { break; } } else { if (end > 7 && bajt == 8) { break; } if (bajt == 8) { bajt = 0; } } } if (table != null) { binary = groupDecompress(binary, table, compressKey); } toRet = binaryToString(binary); return(toRet); }
static void Main(string[] args) { string tajnaPoruka = "ps"; string newFileName; string newFileName1; string fileName1 = "ravno.docx"; string fileName = Path.GetFullPath(fileName1); string directory = Directory.GetCurrentDirectory(); WordDocument.clearSpaces(fileName); while (true) { Console.WriteLine("\n"); Console.WriteLine("Tajna poruka je: " + tajnaPoruka); Console.WriteLine("Unesite broj za zeljeni algoritam:"); Console.WriteLine("1 - Metoda blanko znakova kod poravnatog teksta"); Console.WriteLine("2 - Metoda blanko znakova kod neporavnatog teksta"); Console.WriteLine("3 - ZWC metoda"); Console.WriteLine("4 - Metoda koriscenja nevidljivih simbola"); Console.WriteLine("5 - Metoda sa Hafmanovom kompresijom"); Console.WriteLine("6 - Metoda sa enkripcijom"); Console.WriteLine("7 - Promenite tajnu poruku"); Console.WriteLine("q - kraj"); string alg = Console.ReadLine(); //1. algoritam - metoda blanko znakova kod poravnatog teksta if (alg == "1") { newFileName1 = "stego1.docx"; newFileName = Path.Combine(directory, newFileName1); if (OpenSpace.stegoJustification(tajnaPoruka, fileName, newFileName)) { Console.WriteLine("Stego fajl je kreiran."); Console.WriteLine("Poruka iz stego fajla je: " + OpenSpace.stegoJustificationRet(newFileName)); } else { Console.WriteLine("Predugacka poruka!"); } } //2. algoritam - metoda blanko znakova kod neporavnatog teksta else if (alg == "2") { newFileName1 = "stego2.docx"; newFileName = Path.Combine(directory, newFileName1); if (OpenSpace.stego(tajnaPoruka, fileName, newFileName)) { Console.WriteLine("Stego fajl je kreiran."); Console.WriteLine("Poruka iz stego fajla je: " + OpenSpace.stegoRet(newFileName)); } else { Console.WriteLine("Predugacka poruka!"); } } //3. algoritam - ZWC metoda else if (alg == "3") { newFileName1 = "stego3.docx"; newFileName = Path.Combine(directory, newFileName1); if (OpenSpace.stegoZWC(tajnaPoruka, fileName, newFileName)) { Console.WriteLine("Stego fajl je kreiran."); Console.WriteLine("Poruka iz stego fajla je: " + OpenSpace.stegoZWCret(newFileName)); } else { Console.WriteLine("Predugacka poruka!"); } } //4. algoritam - Metoda koriscenja nevidljivih simbola else if (alg == "4") { newFileName1 = "stego4.docx"; newFileName = Path.Combine(directory, newFileName1); int[] stegoKey = { 8207, 8206, 8205, 8204 }; if (OpenSpace.stegoChar(tajnaPoruka, fileName, newFileName, stegoKey, null)) { Console.WriteLine("Stego fajl je kreiran."); Console.WriteLine("Poruka iz stego fajla je: " + OpenSpace.stegoCharRet(newFileName, stegoKey, null, null)); } else { Console.WriteLine("Predugacka poruka!"); } } //5. algoritam - Metoda sa Hafmanovom kompresijom else if (alg == "5") { newFileName1 = "stego5.docx"; newFileName = Path.Combine(directory, newFileName1); Dictionary <char, int> freq = OpenSpace.stegoHuffman(tajnaPoruka, fileName, newFileName); if (freq != null) { Console.WriteLine("Stego fajl je kreiran."); Console.WriteLine("Poruka iz stego fajla je: " + OpenSpace.stegoHuffmanRet(newFileName, freq)); } else { Console.WriteLine("Predugacka poruka!"); } } // 6. algoritam - Metoda sa enkripcijom else if (alg == "6") { newFileName1 = "stego6.docx"; newFileName = Path.Combine(directory, newFileName1); List <string> table; string[] compressKey = { "G1", "G2", "G3", "G4" }; byte[] iv; byte[] key; int[] stegoKey = { 8207, 8206, 8205, 8204 }; bool ok = OpenSpace.stegoEncryption(tajnaPoruka, fileName, newFileName, out iv, out key, stegoKey, compressKey, out table); if (ok) { Console.WriteLine("Stego fajl je kreiran."); Console.WriteLine("Poruka iz stego fajla je: " + OpenSpace.stegoEncryptionRet(newFileName, iv, key, stegoKey, compressKey, table)); } else { Console.WriteLine("Predugacka poruka!"); } } else if (alg == "7") { Console.WriteLine("Unesite poruku: "); tajnaPoruka = Console.ReadLine(); } else if (alg == "q") { break; } } }