示例#1
0
文件: DES.cs 项目: morozovcookie/des
        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();
            }
        }
示例#2
0
        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();
        }
示例#3
0
 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());
 }