/// <summary> /// Užkoduoja dvejetainiu formatu pateikiamą pranešimą pagal tiesioginį sąsūkos kodą. /// </summary> /// <param name="text">Pranešimas dvejetainiu formatu</param> /// <returns>Užkoduotas pranešimas dvejetainiu formatu</returns> public string Encode(string text) { CleanRegisters(); text += "000000"; // Užkoduojant pranešimą reikia į galą prirašyti 6 nulius StringBuilder sb = new StringBuilder(""); foreach (char bit in text) { sb.Append(bit); // Pirmas užkodavimo bitas yra input bito kopija // Antras užkodavimo bitas yra gaunamas sumuojant 2, 5, 6 registrus ir ipnut bitą char result = BitUtils.AddMod2( BitUtils.AddMod2(_registers[1], _registers[4]), BitUtils.AddMod2(_registers[5], bit) ); MoveRegisters(bit); // Įstumiame pirmą input bitą į viršutinį registrą sb.Append(result); } return(sb.ToString()); }
/// <summary> /// Dekoduoja dvejetainiu formatu pateikiamą tiesioginio sąsūkos kodo užkoduotą pranešimą tiesioginiu būdu. /// </summary> /// <param name="text">Užkoduotas pranešimas dvejetainiu formatu</param> /// <returns>Dekoduotas pranešimas dvejetainiu formatu</returns> public string Decode(string text) { CleanRegisters(); StringBuilder sb = new StringBuilder(""); string[] bitPairs = TransformToPairs(text); for (int i = 0; i < bitPairs.Length; i++) { _bit1 = bitPairs[i][0]; _bit2 = bitPairs[i][1]; //char outBit = _upperRegisters[5]; // Sudedami 2, 5, 6 viršutiniai registrai ir abu input bitai char upperSum = BitUtils.AddMod2( BitUtils.AddMod2(_upperRegisters[1], _upperRegisters[4]), BitUtils.AddMod2(_upperRegisters[5], BitUtils.AddMod2(_bit1, _bit2)) ); // Kai praeiname užkodavime pridėtus nulinius bitus, pradedame išsaugoti dekoduotas reikšmes if (i >= 6) { sb.Append(BitUtils.AddMod2(_upperRegisters[5], MDE(upperSum))); } // Registrus perstumiame iteracijos pabaigoje MoveUpperRegisters(_bit1); // Įstumiame pirmą input bitą į viršutinį registrą MoveLowerRegisters(upperSum); if (_debuggingIsEnabled) { Console.WriteLine("upperSum: " + upperSum); Console.WriteLine(); } } return(sb.ToString()); }