public override string Criptoanaliza(string s) { litere L1 = new litere('Z' - 'A' + 1); // aparitia literelor intr-un text oarecare litere L2 = new litere('Z' - 'A' + 1); // aparitia literelor in textul criptat EnumerareLitere(ref L1, @"Random_text.txt"); EnumerareLitere(ref L2, @"text_criptat.txt"); SortareDesc(ref L1); SortareDesc(ref L2); StringBuilder sb = new StringBuilder(); int j; for (int i = 0; i < s.Length; i++) { if ('A' <= s[i] && s[i] <= 'Z') { // cautam litera potrivita in lista de aparitie for (j = 0; s[i] != L2.caracter[j]; j++) { ; } // adaugam litera corespunzatoara sb.Append(L1.caracter[j]); } else { sb.Append(s[i]); } } return(sb.ToString()); }
private void SortareDesc(ref litere L) { bool ok = false; int n = L.caracter.Length; do { ok = true; for (int i = 0; i < n - 1; i++) { if (L.aparitie[i] < L.aparitie[i + 1]) { ok = false; Schimba <float>(ref L.aparitie[i], ref L.aparitie[i + 1]); Schimba <char>(ref L.caracter[i], ref L.caracter[i + 1]); } } } while (!ok); }
private void EnumerareLitere(ref litere L, string file) { L = new litere('Z' - 'A' + 1); StreamReader sr = new StreamReader(file); char c; int i; do { c = Convert.ToChar(sr.Read()); c = char.ToUpper(c); if ('A' <= c && c <= 'Z') { i = 0; while (c != L.caracter[i]) { i++; } L.aparitie[i]++; } } while (!sr.EndOfStream); }