January 26, 2016
Today I got my project assigned. I started to research different types of steganography. I found out you can hide text in text, images, or audio. You can also hide an image in an image. The hiding text in audio made me wonder if you could hide audio in an image or an image in audio, but that will not be researched until I get several algorithms for text in an image working first.
January 30, 2016
On Wednesday I had started working on this website, but then my computer stopped working. Luckily, I didn't lose anything that I had worked on. I then spent the next two days trying to get my computer to work again, and today I finally got everything fixed and was able to go back to working on this website. I spent a good amount of the time trying to figure what colors to use, and what should be which color. I also got all the pages created, but some of the pages will only contain the title and menu bar for quite a while. The resume and journal pages are done, except for weekly updates to the journal page. The home page is mostly complete. All I have to complete is my philosophy statement.
February 2, 2016
On Sunday I began to research the history of steganography, expecting to find lots of information easily. I quickly discovered that it would be more work than I thought. I found several potential sources, but did not read any of them. Today I read all but one (I am waiting for the library to receive it). The history goes back to Ancient Greece and Rome, which I was not expecting at all. I guess it's true when they say "what's old becomes new again". I have started to lay out the history on the website, and have decided to organize it as best I can into different time periods, from oldest to most recent.
Febraury 7, 2016
I finished researching the history of steganography, at least for now. If I have more time at the end of the semester I may go back and add some more information. I also completed the comparison between steganography and cryptography. I am sure there are a lot more aspects of the two that can be compared, but for now I think I have the main differences and common goal done. Today's progress put me back on track for my timeline, which hopefully I can stick to, if not improve. My next task will be to figure out what algorithms to use and what language to do the coding in.
February 11, 2016
I met with Dr. Pankratz today to better clarify the program part of my project. I have to get hiding text in an image done before moving onto different things to be hidden (like images). The user must be able to import a file, but for now I can limit the type of file to be a text file. The user has to be able to choose what the cover image will be, but I can provide a list to choose from. I'm going to start by making it so there is no choice for the cover image and the text must be in a specific file for ease of testing. Once I have the various techniques done, with the reversal of each technique, I will make the program more user friendly, adding in the above mentioned requirements, and the ability to save, load, etc.
Febraury 14, 2016
Today was yet another research day, but this week I will start coding. The research focused on different methods of steganography. Possible methods to be implemented for this project:
Tomorrow or Tuesday I plan on doing additional research into digital watermarking (and how precisely to accomplish this) and transform domain.
February 16, 2016
I looked into each of the methods mentioned in my previous post.
I also learned what DCT is. Basically, the image is divided into 8x8 pixel blocks. Each block is then transformed into 64 DCT coefficients. The coefficients are then divided by a value from a quantization table, which is when the image becomes compressed. It's hard to completely understand DCT because it's been a few years since I have tried to understand such a complex formula.
The more I research the above techniques, the more it becomes apparent that the image type dictates what method should be used. It is also clear there are not many ways to hide a message in an image without having to worry about loss of data. The less you have to worry about the loss of data, the more complex the method used to hide the data (and the more mathematical it becomes). I definitely did not expect it to be this hard to find and understand various techniques of image steganography.
February 22, 2016
Today I wrote a C# console program to figure out which bitwise operations did what, and how to get the binary value of a string. No matter what methods I end up doing, I will have to deal with the bits of each pixel, and possibly change some of the bits of each pixel.
February 23, 2016
I met with Dr. Pankratz today to discuss the methods of steganography. We decided that I would start with LSB using a 24-bit image, then doing experiments with the image. Dr. McVey had drawn a sketch of what the program could look like on the dry-erase board (basically two images next to each other - the original and the stego-image). Now I can finally get to the coding, and in my opinion, what will be the hardest, most interesting and rewarding part.
Febraury 29, 2016
I created my project, and created a test file and plain white image for testing. I wrote the code for LSB using only the last bit of each byte in the pixel. I couldn't tell if it was changing the pixel, so I decided to change the second bit of each byte in the pixel, and I was able to see different colors. I also tried to put an executable on my webpage, but couldn't figure it out, so I thought I would just have it as a link, but I couldn't get the program to run from that. I'll have to figure it out sometime this week, but for now I'm going to skip it and work on making sure I am hiding the text file correctly and can retrieve the file. I will then move onto making to more user friendly by allowing them to select their text files and pictures. I also started working on getting the text from the image, but I think I'm going to call it a night and hopefully finish it later this week. It shouldn't take too much longer considering it took me less than three hours to get this far.
March 1, 2016
I had to modify my hiding information because as I was working on the decoding, I realized there was no way to tell whether I had reached the end of the data I had hidden. I also got the retrieving to work properly, and it stops once I have reached the special character I have inserted, so I don't end up reading junk. Next will be making it so I can choose the text file to insert, comment the code I already have, and make it look more user friendly in general.
March 7, 2016
On Saturday I spent several hours trying to figure out how to get my program to work from my website, but after trying several different ways, I gave up for now. I think I may just have to put my source code on the website, unfortunately. Tomorrow is my walkthrough, which I am preparing for today, making sure everything I have so far works, seeing that everything is update, and making sure I have the required materials.
March 8, 2016
Today I have managed to add the necessary code to save and open a stego-image, and ensure the image is in fact one of my stego-images. I also had my walkthrough today and got some feedback about UI for my program, which I will start to incorporate sometime this week or next week.
March 12, 2016
I started out by trying to decide what pictures to include as default choices for my program. It took me about half an hour to narrow down all the pictures I have stored on either my computer for phone to the best choices, both in terms of different theme (i.e. dogs, water, city), and different look (i.e. big chuck of same color, lots of different colors, chucks of different shades of same color). I ended up with 3 different jpg images. I then created 2 bmp images, one completely black, the other completely white. I think with these 5 images, there is a big enough difference for experimenting, yet can still be somewhat useful for an actual stego-image. I then started testing my program with these different images, and discovered when hiding the message, it was only working on the original test image I was using, so I had to change my code to work with all the images (the program was the bitwise operations I was originally using).
March 13, 2016
I now have it where the user can choose from a default list of images, or import their own image. I also have it so the user can import their own text file. The hidden message, once retrieved is now outputted to a rich textbox, and I just have to make it so the user can copy and paste that text. After that I think I'm going to move onto implementing the required zoom feature. I cannot believe how far I have come on this project without spending as much time as I had originally planned on it. After that I will move onto making sure all the expected features are there, things are enabled and disabled at appropriate times, and the modified variable is properly changed. Then I'll focus on making the form prettier, then start experimenting with the number of bits being modified.
March 19, 2016
On Monday I got copy and paste to work for the retrieved message, and tested it to make sure it would paste across different applications. Today I got the zoom in and out to work by changing the way the image is displayed in the picturebox. When zoomed in, there are scroll bars that appear to allow the user to navigate around the zoomed image, and if the user changes where they are looking on one image, it moves the other image to the same spot to allow for easier comparison of the two images. There was no good way to implement the zoom feature without changing the size of the picture box, so it took a while to figure out the best way to implement this feature.
March 24, 2016
Today I tested to make sure hasBeenModified is updated at the correct times. I also made sure the user has to select a text file whenever the image is changed, or an image whenever the text file is changed, as long as there is a stego-image loaded. I then tried testing with a longer text file to see how it would work, but discovered some of the characters in the file would not work when being converted to a byte value. To combat this, I changed the code to use try and catch, catching the overflow exception, and displaying a message saying why there was an exception, and essentially making it so the user never tried to hide the file. I also ensured the user would select an image and/or text file that are compatible in terms of there being enough bytes in the image to hide the number of bits in the message. Once I got all of that done, I added a select all button for the textbox that contains the retrieved message.
April 1, 2016
Today I made so my program has the ability to hide a message using either the least significant bit, or the last two least significant bits. I am able to distinguish between the two using different markers at the beginning of the image, which are all hidden using only the least significant bit. I am also able to retrieve the correct message from both methods. It took a lot of modification of my original program to be able to handle using two bits per color per pixel. After a much needed break (I spent almost four hours today trying to get it all to work without breaking what I already had done), I will move onto adding the code to use the last three significant bits. Hopefully, now that I have it where there are two different methods that can be done at the same time, adding the third shouldn't be too difficult or time consuming. After that, I'll have to decide how many bits I want to allow the user to use, with the cap being all 8. If I allow all 8 to be used, I'll have to watch out for overflow, and prevent it, so I'm thinking I won't allow all the bits to be used.
April 2, 2016
I finished using the three least significant bits last night. Today, I added using the four least significant bits, and cleaned up my code a bit by using more functions or moving some code to different functions/events, eliminating some repeating code. I also added some basic comments, which will need to be elaborated on for the final product. I think other than adding more comments to the code, the only thing I have left with the program is to change the look (i.e. colors, fonts), and make sure there isn't anything on the form that does nothing. I still haven't decided if I want to leave the default about under the help tab, or if I want to add anything to the help tab. I decided today, that using more than four bits per color would not be a good idea, considering using just three bits can show there is a message there. I added the fourth bit, just so it is more obvious for those who cannot necessarily see the change using three bits very well.
April 9, 2016
Earlier in the week I spent some time trying to figure out what color to use for the background color of the form. I had to find a color that worked well with both light and dark images, did not draw attention away from the images, and would not be likely to blend with the images, making it difficult to tell where the image ended, and the background started. I settled on a blue gray color, as gray worked well with both light and dark images, and blue would not draw attention away from the images. Today I focused on choosing the colors for all the controls on the form, making sure the controls are somewhat noticable, go with the background color, and the corresponding text for each control is easy to read. I also changed the fonts of all the words to be large enough to read, and chose an easy to read font. Now that all that is done, I think the program is complete, so I will set it aside, and go back to research. I still have to compare the methods (i.e. the number of bits being used) and determine how detectable the message is.
April 14, 2016
Today during class I was able to get some feedback about my program. This feedback included changing how I had the user select an image, and what is initially displayed when the program starts. I added the improvements to my program. I then needed to save some stego-images in order to use them to determine how easy or difficult it is to see the message, but discovered my save stuff wasn't working anymore. I think I had accidently deleted a line of code when cleaning the code up a lot after adding the ability to choose how many bits to use. I fixed the error, and everything appears to be working fine. I then started looking at one of the stego-images I saved in both a text and a hex editor, and determined that someone could not read the message using either of those, but they could use the hex editor to easily convert the hex values into binary, then start guessing at the number of bits used and possibly find the message, but this would involve some work.
April 21, 2016
Yesterday I met with Dr. Pankratz to talk about what else I could do with my program. We decided that I should try to get up to hiding a whole character in one color of a pixel, essentially replacing each color value with the character. I informed him I tried to use 5 bits, but my program would throw an exception, so we agreed to meet today to discuss my code in an attempt to solve the issue and find out what was happening. We met today and I basically explained what different parts of my code did so he could try to understand what was happening. I tried to explain it as best I could, but it didn't really work out well. I now have to draw diagrams and run through a small example of what should be happening with my algorithm without using the code so much (only referencing parts of it when needed). He also said this will help with both my presentation and documentation. I'll probably work on it sometime this weekend. I also wanted to try to figure out what exactly was casuing the exception, so I added the code for using 5 bits. I ran it and it all worked correctly. I tried several different things to see if it would throw an exception again, but couldn't get it. I then moved on to adding using 6, 7, and 8 bits, testing each one thoroughly before adding the next, and they all worked. I don't know why it's all working now but didn't before, considering it's the same code, but I'm glad it's working.
April 30, 2016
Today I compared my algorithm versus the other two main types of algorithms, namely masking and filtering, and transformations. I also compared the various bit choices for my program using hex and text editors, along with image filters. Having this done means I have completed all the requirements for my project, or at least that can be completed with the time remaining. I did not have enough time to implement different types of algorithms, and I had too much going on this past week to be able to add more choices to my program. I also documented my code with enough comments that I think someone who has not seen the program before can figure out what each function is supposed to do, along with what each function requires in order to work.
May 1, 2015
Today marks the beginning of the end. It is the final week of classes, and with that comes all the normal last minute assignments to finish. It also means that it's presentation week for capstones. My presentation is Tuesday night, and I can honestly say I'm kind of glad I'm the first one to present, considering that means once I'm done, I can sit back and watch everyone else's without the stress of having mines as well. The only part I'm not thrilled about is that I have an Operating Systems exam earlier that day, which means less time to practice on Tuesday, and less time to focus on the capstone because I'll be studying for the exam. I also have an Operating Systems presentation to give on Monday, which means no capstone practice Monday either. Odds are, after today, I won't even look at my capstone until Tuesday after the Operating Systems exam, but it will be fine. Presentations don't really make me nervous until it's time to get up and give it. Today was a day of creating my presentation and working on documentation. Later this week I will double check to make sure I have everything that needs to be handed in done. I will also make sure my website is completely up-to-date.