Projects

It's 5 O'Clock Somewhere ... But Where?

Jimmy Buffet isn't wrong when he sings "it's five o'clock somewhere" (well technically it's 5 o'clock +/- 30 minutes somewhere).

Well, in 2013, I was curious to know exactly where in the world it is 5 o'clock at any given time. I searched on Google and couldn't find a website with this information. So, I put together a PHP script and database to display locations where the local time is as close as possible to 5PM. It scrapes information from Wikipedia in order to give you more information about the city/town/village/island.

Example. Note that the above image does not reflect the current time.

Check it out at https://gjakes.com/5oclock. Refresh the page a few times to see different locations.

Image Steganographer (Python)

Like sending secret messages? Ever wanted to hide a message in plain sight? Or encrypt another file into a seemingly inauspicious picture of a lolcat? Image steganography is one answer!

Yes, steganography is a real word. No, I didn't make it up! Want proof? Wikipedia to the rescue: http://en.wikipedia.org/wiki/Steganography

So this was my little project on an uneventful Saturday in 2011, writing my own image steganographer. It served two purposes: a learning experience in Python, which I had very little prior work in, and provided a small, neat - and possibly useful - app. Essentially what the script does is fiddle with the last two bits of the RGBA (red, green, blue, alpha (transparency)) channels of an image to produce a single byte of information per pixel. It's really a simple idea that works since the changes to each pixel are so minute that normal inspection does not reveal differences between the original and "steganographed" images. Although this process isn't without its flaws, such as requiring the output image to be saved as the lossless format PNG, which creates relatively large files compared to lossy JPEGs. Possibly a future version will compensate for that and allow images saved in JPEG, albeit the amount of data allowed to be encrypted will be greatly reduced because of the data redundancy that would be required. This also means that resizing/editing/saving the image in a different format will corrupt the encrypted data. Keep that in mind!

One goal was to have the ability to either encrypt a text message or arbitrary file data. I've accomplished this and it's really quite fun to encode an image within an image within an image... Everything is run through the command-line options listed below. Sorry, I may make a more user-friendly version in the future.

I should note that the encryption being used here is some simple byte XORing based on the user-supplied password. It is not any type of secure standard.

Command line: StenaImage -enc/-dec [options] "input_filename"

  • -o "filename" : output filename - output image if encrypting, automatically saved as PNG - otherwise, if decrypting, output data to this file, no extension added
  • -p "password" : password to use to encrypt/decrypt
  • -d "data" : data to encrypt into image
  • -f "filename" : data from file to encrypt into image
  • -enc : encrypt
  • -dec : decrypt (either -enc or -dec must be present in command line)

Download links:

For those nerdy few that have Python v3.2 installed and want to see the code, I've placed it here: https://gjakes.com/projectfiles/python/image-steganographer/StenaImage_v1.0_py.zip

For everyone else, I have a Windows executable packaged into a zip file, available here: https://gjakes.com/projectfiles/python/image-steganographer/StenaImage_v1.0_dist.zip