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); }
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); }
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); }
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"); }