예제 #1
0
        public void ShouldCalculateDifferencesOnLsb(int payloadSize, string filename)
        {
            payloadSize = payloadSize / 8;
            var          inputMessage           = GeneratePayload(payloadSize);
            Bitmap       cleanImage             = new Bitmap(filename);
            LSBHeader    header                 = new LSBHeader(MessageType.Plaintext, inputMessage.Length);
            string       inputMeesageInBits     = MessageConverter.Instance.TextToBit(inputMessage);
            InputMessage inputMessageWithHeader = new InputMessage(inputMeesageInBits, header);

            Console.WriteLine("Message size is in bits is {0}", inputMeesageInBits.Length);
            Console.WriteLine("Message with header size is {0}", inputMeesageInBits.Length + LSBHeaderConstants.PlainTextHeaderLength);

            var capacity = cleanImage.Width * cleanImage.Height * 3;

            Console.WriteLine("Image capacity  is {0}", capacity);

            Bitmap        encryptedImage     = LSB.Instance.Encode(cleanImage, inputMessageWithHeader);
            OutputMessage imageMessageInBits = LSB.Instance.Decode(encryptedImage);
            string        imageMessage       = AlgorithmUtility.bitMessageToText(imageMessageInBits.GetContent(), (int)LSBHeaderConstants.PlainTextHeaderLength);

            Assert.AreEqual(imageMessage, inputMessage);

            double mse = MSE.Instance.CalculateDifference(cleanImage, encryptedImage);

            Console.WriteLine("MSE is {0}", mse);

            double psnr = PSNR.Instance.CalculateDifference(mse);

            Console.WriteLine("PSNR is {0}", psnr);

            double imageSimilarity;

            ImageDifference.Instance.CalculateDifference(cleanImage, encryptedImage, out imageSimilarity);
            Console.WriteLine("Image Similiarity is {0}", imageSimilarity);
        }
예제 #2
0
        public void ShouldCalculateDifferencesOnHS(int payloadSize, string filename)
        {
            payloadSize = payloadSize / 8;
            var           message            = GeneratePayload(payloadSize);
            Bitmap        cleanImage         = new Bitmap(filename);
            HSHeader      header             = new HSHeader(MessageType.Plaintext, message.Length);
            string        inputMeesageInBits = MessageConverter.Instance.TextToBit(message);
            IInputMessage inputMessage       = new InputMessage(inputMeesageInBits, header);

            Console.WriteLine("Message size is in bits is {0}", inputMeesageInBits.Length);
            Console.WriteLine("Message with header size is {0}", inputMeesageInBits.Length + HSHeaderConstants.PlainTextHeaderLength);


            Dictionary <int, int>      histogram = HS.Instance.calculateHistogram(cleanImage);
            Tuple <int, int, int, int> myTuple   = HS.Instance.findMinAndMax(histogram);
            int minIndex      = myTuple.Item3;
            int maxIndex      = myTuple.Item4;
            int maxIndexValue = myTuple.Item2;

            var capacity = maxIndexValue;

            Console.WriteLine("Image capacity  is {0}", capacity);


            Bitmap encryptedImage = HS.Instance.Encode(cleanImage, inputMessage);


            OutputMessage imageMessageInBits = HS.Instance.Decode(encryptedImage, minIndex, maxIndex);
            string        imageMessage       = AlgorithmUtility.bitMessageToText(imageMessageInBits.GetContent(), (int)HSHeaderConstants.PlainTextHeaderLength);

            Assert.AreEqual(message, imageMessage);

            double mse = MSE.Instance.CalculateDifference(cleanImage, encryptedImage);

            Console.WriteLine("MSE is {0}", mse);

            double psnr = PSNR.Instance.CalculateDifference(mse);

            Console.WriteLine("PSNR is {0}", psnr);

            double imageSimilarity;

            ImageDifference.Instance.CalculateDifference(cleanImage, encryptedImage, out imageSimilarity);
            Console.WriteLine("Image Similiarity is {0}", imageSimilarity);

            Bitmap cleanedImage = HS.Instance.Clean(encryptedImage, minIndex, maxIndex);

            var error = MSE.Instance.CalculateDifference(cleanedImage, cleanImage);

            Assert.AreEqual(0, error);
        }
예제 #3
0
        public void ShouldReadEncryptedTextInputMessageLeft(string message)
        {
            Bitmap        cleanImage         = new Bitmap(cleanImagePathLeft);
            HSHeader      header             = new HSHeader(MessageType.Plaintext, message.Length, 0);
            string        inputMeesageInBits = MessageConverter.Instance.TextToBit(message);
            IInputMessage inputMessage       = new InputMessage(inputMeesageInBits, header);
            Bitmap        encryptedImage     = HS.Instance.Encode(cleanImage, inputMessage);

            Dictionary <int, int>      histogram = HS.Instance.calculateHistogram(cleanImage);
            Tuple <int, int, int, int> myTuple   = HS.Instance.findMinAndMax(histogram);
            int minIndex = myTuple.Item3;
            int maxIndex = myTuple.Item4;

            OutputMessage imageMessageInBits = HS.Instance.Decode(encryptedImage, minIndex, maxIndex);
            string        imageMessage       = AlgorithmUtility.bitMessageToText(imageMessageInBits.GetContent(), (int)HSHeaderConstants.PlainTextHeaderLength);

            Assert.AreEqual(message, imageMessage);
        }
예제 #4
0
        public void ShouldReadEncryptedBinaryInputMessageRight()
        {
            Bitmap        binaryImage            = new Bitmap(binaryImagePath);
            Bitmap        cleanImage             = new Bitmap(cleanImagePathRight);
            string        loadedImageContent     = MessageConverter.Instance.BinaryImageToBit(binaryImage, binaryImage.Width, binaryImage.Height);
            HSHeader      header                 = new HSHeader(MessageType.BinaryImage, loadedImageContent.Length, binaryImage.Width, binaryImage.Height);
            IInputMessage inputMessageWithHeader = new InputMessage(loadedImageContent, header);
            Bitmap        encryptedImage         = HS.Instance.Encode(cleanImage, inputMessageWithHeader);

            Dictionary <int, int>      histogram = HS.Instance.calculateHistogram(cleanImage);
            Tuple <int, int, int, int> myTuple   = HS.Instance.findMinAndMax(histogram);
            int minIndex = myTuple.Item3;
            int maxIndex = myTuple.Item4;

            OutputMessage outputMessage = HS.Instance.Decode(encryptedImage, minIndex, maxIndex);
            string        withoutHeader = outputMessage.GetContent().Substring((int)HSHeaderConstants.BinaryImageHeaderLength);

            Assert.AreEqual(loadedImageContent, withoutHeader);

            Bitmap drawnImage = ImageDrawer.Instance.DrawBinaryImage(withoutHeader, outputMessage.GetHeaderData().GetImageWidth(), outputMessage.GetHeaderData().GetImageHeight());

            drawnImage.Save(savePath + DateTime.Now.ToString("yyyy-dd-MM-HH-mm-ss") + ".png");
        }