Beispiel #1
0
        static void Main(string[] args)
        {
            switch (args.Length)
            {
            case 3:
            {
                var stopwatch = new Stopwatch();
                stopwatch.Start();

                var key = Encoding.ASCII.GetBytes(args[0]);

                using (var srcFile = new FileStream(args[1], FileMode.Open))
                {
                    using (var destFile = new FileStream(args[2], FileMode.Create))
                    {
                        Console.WriteLine("Encoding...");

                        var rc4 = new RC4Stream(key, srcFile);
                        rc4.CopyTo(destFile);

                        var elapsed = stopwatch.Elapsed;
                        var speed   = (srcFile.Length * 1f / (1 << 20)) / (elapsed.TotalMilliseconds / 1000);

                        Console.WriteLine($"Completed in {elapsed.TotalSeconds:F1} seconds at {speed:F1} MB/s");
                    }
                }
            }
            break;

            case 1:
            {
                var key = Encoding.ASCII.GetBytes(args[0]);

                Console.WriteLine("Enter input text:");
                var text  = Console.ReadLine();
                var input = Encoding.ASCII.GetBytes(text);

                var rc4    = new RC4(key);
                var output = rc4.TransformFinalBlock(input, 0, input.Length);

                Console.WriteLine("Output bytes:");
                foreach (byte b in output)
                {
                    Console.Write($"{b:x2} ");
                }
                Console.WriteLine();
            }
            break;

            default:
                Console.WriteLine($"Usage: RC4App key [source] [destination]");
                break;
            }
        }
Beispiel #2
0
        public void EncryptStreamTest()
        {
            // arrange
            var key        = "Key";
            var srcFile    = new FileStream("Data/test1.txt", FileMode.Open);
            var cipherText = new byte[srcFile.Length];

            // action
            var rc4 = new RC4Stream(Encoding.ASCII.GetBytes(key), srcFile);

            rc4.Read(cipherText, 0, cipherText.Length);

            // assert
            Assert.AreEqual(new byte[] { 0xBB, 0xF3, 0x16, 0xE8, 0xD9, 0x40, 0xAF, 0x0A, 0xD3 }, cipherText);

            srcFile.Close();
        }
Beispiel #3
0
        public void EncryptToStreamTest()
        {
            // arrange
            var key        = "Key";
            var srcFile    = new FileStream("Data/test1.txt", FileMode.Open);
            var destStream = new MemoryStream();

            // action
            var rc4 = new RC4Stream(Encoding.ASCII.GetBytes(key), srcFile);

            rc4.CopyTo(destStream, 1);

            // assert
            var cipherText = new byte[destStream.Length];

            destStream.Seek(0, SeekOrigin.Begin);
            destStream.Read(cipherText, 0, cipherText.Length);
            Assert.AreEqual(new byte[] { 0xBB, 0xF3, 0x16, 0xE8, 0xD9, 0x40, 0xAF, 0x0A, 0xD3 }, cipherText);

            srcFile.Close();
        }
Beispiel #4
0
        public void DecryptToStreamTest()
        {
            // arrange
            var key        = "Key";
            var srcStream  = new MemoryStream();
            var destStream = new MemoryStream();

            srcStream.Write(new byte[] { 0xBB, 0xF3, 0x16, 0xE8, 0xD9, 0x40, 0xAF, 0x0A, 0xD3 });
            srcStream.Seek(0, SeekOrigin.Begin);

            // action
            var rc4 = new RC4Stream(Encoding.ASCII.GetBytes(key), srcStream);

            rc4.CopyTo(destStream, 1);

            // assert
            destStream.Seek(0, SeekOrigin.Begin);
            var reader    = new StreamReader(destStream);
            var plainText = reader.ReadToEnd();

            Assert.AreEqual("Plaintext", plainText);
        }