public void Start(string InputFilename, string OutputFilename, UInt64 Key, DESMode.DESMode Mode, bool Decode) { using (System.IO.BinaryReader Reader = new System.IO.BinaryReader(System.IO.File.Open(InputFilename, System.IO.FileMode.Open))) { using (System.IO.BinaryWriter Writer = new System.IO.BinaryWriter(System.IO.File.Open(OutputFilename, System.IO.FileMode.OpenOrCreate))) { const int MaxSize = 1048576; int n = 0; byte[] buffer = new byte[MaxSize]; int size = 0; int k = 0; UInt64 DESResult = 0; while ((n = Reader.Read(buffer, 0, MaxSize)) > 0) { k = 0; while (n > 0) { if ((n / 8) > 0) size = 8; else size = n; byte[] tempArray = new byte[size]; for (int i = 0; i != size; ++i, ++k) tempArray[i] = buffer[k]; if (!Decode) DESResult = Mode.EncodeBlock(GetUIntFromByteArray(tempArray), Key); else DESResult = Mode.DecodeBlock(GetUIntFromByteArray(tempArray), Key); Writer.Write(GetByteArrayFromUInt(DESResult, size), 0, size); n -= 8; } } Writer.Close(); } Reader.Close(); } }
public string Encript(string message) { mode = DESMode.Encription; byte[] byteMessage = PreprocessMessage(message); List<BinaryNumber> ipInput = new List<BinaryNumber>(); BinaryNumber temp = new BinaryNumber(); for (int i = 0; i < byteMessage.Length; i++) { temp.Add(ToBinaryNumber(byteMessage[i], 8)); if ((i + 1)%8 == 0) { ipInput.Add(new BinaryNumber(temp)); temp.Clear(); } } encrypted = new List<BinaryNumber>(); for (int i = 0; i < ipInput.Count; i++) { encrypted.Add(Process(ipInput[i])); } StringBuilder sb = new StringBuilder(); foreach (var binaryNumber in encrypted) { sb.Append(binaryNumber); } return sb.ToString(); }
public string Decript() { mode = DESMode.Decription; List<BinaryNumber> decrypted = new List<BinaryNumber>(); for (int i = 0; i < encrypted.Count; i++) { decrypted.Add(Process(encrypted[i])); } List<byte> decryptedBytes = new List<byte>(); foreach (var binaryNumber in decrypted) { string b = ""; for (int i = 0; i < binaryNumber.Length; i++) { b += binaryNumber[i]; if ((i+1)%8 == 0) { decryptedBytes.Add(Convert.ToByte(b, 2)); b = ""; } } } return Encoding.Unicode.GetString(decryptedBytes.ToArray()); }