{"id":467,"date":"2024-03-28T21:59:58","date_gmt":"2024-03-28T21:59:58","guid":{"rendered":"https:\/\/anti-forensics.com\/blog\/?p=467"},"modified":"2024-03-28T21:59:59","modified_gmt":"2024-03-28T21:59:59","slug":"lsb-steganography-in-python-using-png-files","status":"publish","type":"post","link":"https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/","title":{"rendered":"LSB (Least Significate Bit) Steganography in Python using PNG Files"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine you have a secret note that you want to pass to a friend without anyone else noticing. Instead of hiding the note in your hand or pocket, you decide to hide it in a drawing or a photo. That&#8217;s basically what steganography is. Hiding a message within something else so that only the sender and the intended recipient know it&#8217;s there.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The specific <em>steganography<\/em> topic covered is <strong>LSB Steganography in Python<\/strong>. The process can be done like this. Take a secret message, turn it into bits, and then swap out the least significant bits of the pixels in the image with the bits of your secret message. To anyone else, the picture looks just the same. This software will encode and decode plaintext messages into PNG files.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Software: tuckerlsb<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The original tucker.py simply concatenated files together to demonstrate <strong><a href=\"https:\/\/anti-forensics.com\/blog\/steganography-by-file-appending-hiding-a-zip-file-in-a-jpg\/\">Steganography by File Appending<\/a><\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">tuckerlsb.py is a simple implementation of LSB steganography in Python for PNG files. A user will provide an input image, an output image where the message will be contained, and the secret message to be saved within the output file. It also works in reverse. You can take an input image which may contain a secret, then reveal this secret message.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sample Usage<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>PS C:\\tools> .\\tuckerlsb.exe\nusage: tuckerlsb.exe &#91;-h] --input INPUT_IMAGE &#91;--output OUTPUT_IMAGE] &#91;--message USER_MESSAGE] &#91;--getmessage]\ntuckerlsb.exe: error: the following arguments are required: --input\/-i\n\nPS C:\\tools> .\\tuckerlsb.exe --input .\\demo.png --output steg.png --message \"Hello my friend!\"\n&#91;+] Saving image to: steg.png\n\nPS C:\\tools> .\\tuckerlsb.exe --input .\\steg.png --getmessage\nHello my friend!<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">The Code<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This first piece of code converts a text message into its binary representation, a process which transforms each character of the message into a sequence of 0s and 1s.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>for<\/code> loop goes through the message character by character. For each character in the <code>message<\/code>, the loop performs the following steps below:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        binary_string = ''\r\n        for char in message:\r\n            binary_char = format(ord(char), '08b')\r\n            binary_string += binary_char\r\n\r\n        return binary_string<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>ord<\/code> function is used to find the ASCII value of the character. ASCII is a standard that assigns numbers to different characters. For example, the ASCII value of &#8216;A&#8217; is 65, &#8216;B&#8217; is 66, and so on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The ASCII value is then converted to its binary equivalent using the <code>format<\/code> function. The <code>'08b'<\/code> format specifier tells the function to format the number as binary, padded with zeros to make it 8 digits long. This is because in ASCII, each character is represented by an 8-bit binary number (1 byte).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">The next snippet of code does the opposite of the previous one; it converts a binary string back into a human-readable text message. This code takes a string of binary data (composed of 0s and 1s) and decodes it back into its original text form, character by character, by interpreting each group of 8 binary digits as one ASCII character.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        for i in range(0, len(binary_message), 8):\r\n            byte = binary_message&#91;i:i + 8]\r\n            text += chr(int(byte, 2))\r\n\r\n        return text<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>range<\/code> function starts from 0, goes up to the length of the binary message (<code>len(binary_message)<\/code>), stepping 8 units at a time. This means it processes one character of the original message in each iteration since, in ASCII encoding, one character is represented by 8 bits.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Inside the loop, <code>byte = binary_message[i:i + 8]<\/code> slices out 8 bits from the binary message starting from index <code>i<\/code>. This 8-bit segment (or byte) represents one character from the original message in binary form.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The binary byte is then converted back to a numerical value using <code>int(byte, 2)<\/code>, with the 2 indicating that the number should be interpreted as a base-2 (binary) number. This numerical value corresponds to the ASCII value of the character. The <code>chr<\/code> function then converts this ASCII value back into the corresponding character.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">This code starts by converting the message into a binary form (a series of 0s and 1s) and then alters the pixels of an image to encode this binary message directly into the image itself. Each bit of the binary message is hidden by tweaking the least significant bit (the last bit) of a color component in a pixel. Since these changes are so minor, they are virtually invisible to the naked eye, and the image appears unchanged.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        image = Image.open(self.input_image)\r\n        binary_message = self.text_to_binary(self.message) + self.delimeter\r\n        pixels = image.load()\r\n        message_index = 0\r\n\r\n        for row in range(image.size&#91;0]):\r\n            for column in range(image.size&#91;1]):\r\n                if message_index &lt; len(binary_message):\r\n                    pixel = list(pixels&#91;row, column])\r\n\r\n                    bit_to_write = int(binary_message&#91;message_index])\r\n                    pixel&#91;0] = (pixel&#91;0] &amp; ~1) | bit_to_write\r\n\r\n                    pixels&#91;column, row] = tuple(pixel)\r\n                    message_index += 1\r\n                else:\r\n                    break\r\n            else:\r\n                continue\r\n            break\r\n\r\n        print(f'&#91;+] Saving image to: {self.output_image}')\r\n        image.save(self.output_image)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The code loops through each pixel in the image, hiding a bit of the message in the pixels until the entire message is embedded. Once the message is fully hidden within the image, it saves this modified image to a new file. This technique allows secret messages to be embedded in plain sight without detection as the image alterations are too subtle for the human eye.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">With this next code, the opposite is performed. This code checks the very last bit of a color component (RGB) of each pixel to collect a series of 0s and 1s. These 0s and 1s are pieced together to form a binary message. It keeps collecting these bits until it finds the delimiter that identifies the end of the hidden message. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        image = Image.open(input_image)\r\n        pixels = image.load()\r\n\r\n        binary_message = ''\r\n\r\n        for row in range(image.size&#91;0]):\r\n            for column in range(image.size&#91;1]):\r\n                pixel = pixels&#91;column, row]\r\n                least_significant_bit = pixel&#91;0] &amp; 1\r\n                binary_message += str(least_significant_bit)\r\n\r\n                if binary_message.endswith(self.delimeter):\r\n                    binary_message = binary_message&#91;:-16]  # Remove the delimiter\r\n                    return self.binary_to_text(binary_message)\r\n\r\n        return \"ERROR\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Once this pattern is found, the code removes this end marker and translates the binary message back into text, revealing the secret message from earlier.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This text is then printed to stdout.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Downloads<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Anti-Forensics\/tuckerlsb\/tree\/master\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub Sourceco<\/a><a href=\"https:\/\/github.com\/Anti-Forensics\/tuckerlsb\/tree\/master\">de<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Anti-Forensics\/tuckerlsb\/releases\/tag\/v1.0\" target=\"_blank\" rel=\"noreferrer noopener\">tuckerlsb Windows x86_64 Executable<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Using LSB Steganography in Python to hide a message in a PNG. Input and extract hidden messages using Least Significant Bit Steganography.<\/p>\n","protected":false},"author":1,"featured_media":468,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22,24],"tags":[69,13,70],"class_list":["post-467","post","type-post","status-publish","format-standard","has-post-thumbnail","category-digital-forensics","category-software-code","tag-lsb","tag-python","tag-steganography"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>LSB (Least Significate Bit) Steganography in Python using PNG Files - Anti-Forensics.com<\/title>\n<meta name=\"description\" content=\"Using LSB Steganography in Python to hide a message in a PNG. Input and extract hidden messages using Least Significant Bit Steganography.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"LSB (Least Significate Bit) Steganography in Python using PNG Files - Anti-Forensics.com\" \/>\n<meta property=\"og:description\" content=\"Using LSB Steganography in Python to hide a message in a PNG. Input and extract hidden messages using Least Significant Bit Steganography.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/\" \/>\n<meta property=\"og:site_name\" content=\"Anti-Forensics.com\" \/>\n<meta property=\"article:author\" content=\"https:\/\/facebook.com\/stercutis\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-28T21:59:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-28T21:59:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/anti-forensics.com\/blog\/wp-content\/uploads\/2024\/03\/anti-forensics.com-lsb-steganography-in-python.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Max\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Max\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/lsb-steganography-in-python-using-png-files\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/lsb-steganography-in-python-using-png-files\\\/\"},\"author\":{\"name\":\"Max\",\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/#\\\/schema\\\/person\\\/ac3dd160cb42b1409a2a55dea58beec2\"},\"headline\":\"LSB (Least Significate Bit) Steganography in Python using PNG Files\",\"datePublished\":\"2024-03-28T21:59:58+00:00\",\"dateModified\":\"2024-03-28T21:59:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/lsb-steganography-in-python-using-png-files\\\/\"},\"wordCount\":779,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/lsb-steganography-in-python-using-png-files\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/anti-forensics.com-lsb-steganography-in-python.jpg\",\"keywords\":[\"lsb\",\"python\",\"steganography\"],\"articleSection\":[\"Digital Forensics\",\"Software\\\/Code\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/lsb-steganography-in-python-using-png-files\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/lsb-steganography-in-python-using-png-files\\\/\",\"url\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/lsb-steganography-in-python-using-png-files\\\/\",\"name\":\"LSB (Least Significate Bit) Steganography in Python using PNG Files - Anti-Forensics.com\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/lsb-steganography-in-python-using-png-files\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/lsb-steganography-in-python-using-png-files\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/anti-forensics.com-lsb-steganography-in-python.jpg\",\"datePublished\":\"2024-03-28T21:59:58+00:00\",\"dateModified\":\"2024-03-28T21:59:59+00:00\",\"description\":\"Using LSB Steganography in Python to hide a message in a PNG. Input and extract hidden messages using Least Significant Bit Steganography.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/lsb-steganography-in-python-using-png-files\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/lsb-steganography-in-python-using-png-files\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/lsb-steganography-in-python-using-png-files\\\/#primaryimage\",\"url\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/anti-forensics.com-lsb-steganography-in-python.jpg\",\"contentUrl\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/anti-forensics.com-lsb-steganography-in-python.jpg\",\"width\":1024,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/lsb-steganography-in-python-using-png-files\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"LSB (Least Significate Bit) Steganography in Python using PNG Files\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/\",\"name\":\"Anti-Forensics.com\",\"description\":\"Rendering Digital Investigations Irrelevant\",\"publisher\":{\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/#organization\",\"name\":\"Anti-Forensics.com\",\"url\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/cropped-anti-forensics.com_.jpg\",\"contentUrl\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/cropped-anti-forensics.com_.jpg\",\"width\":512,\"height\":512,\"caption\":\"Anti-Forensics.com\"},\"image\":{\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/groups\\\/14345620\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/#\\\/schema\\\/person\\\/ac3dd160cb42b1409a2a55dea58beec2\",\"name\":\"Max\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7ca31cae39a49ab947496651bc5c75ee545a72f31c02db1a5c31f80b28714601?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7ca31cae39a49ab947496651bc5c75ee545a72f31c02db1a5c31f80b28714601?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7ca31cae39a49ab947496651bc5c75ee545a72f31c02db1a5c31f80b28714601?s=96&d=mm&r=g\",\"caption\":\"Max\"},\"description\":\"Anti-forensics involves attempts to hide data, damage the confidentiality, integrity, and availability of data in an effort to make analysis and examination of this data (evidence) difficult or impossible.\",\"sameAs\":[\"https:\\\/\\\/anti-forensics.com\\\/blog\",\"https:\\\/\\\/facebook.com\\\/stercutis\",\"https:\\\/\\\/linkedin.com\\\/in\\\/jesse-shelley\"],\"url\":\"https:\\\/\\\/anti-forensics.com\\\/blog\\\/author\\\/realjesseshelley_hkwwlra2\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"LSB (Least Significate Bit) Steganography in Python using PNG Files - Anti-Forensics.com","description":"Using LSB Steganography in Python to hide a message in a PNG. Input and extract hidden messages using Least Significant Bit Steganography.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/","og_locale":"en_US","og_type":"article","og_title":"LSB (Least Significate Bit) Steganography in Python using PNG Files - Anti-Forensics.com","og_description":"Using LSB Steganography in Python to hide a message in a PNG. Input and extract hidden messages using Least Significant Bit Steganography.","og_url":"https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/","og_site_name":"Anti-Forensics.com","article_author":"https:\/\/facebook.com\/stercutis","article_published_time":"2024-03-28T21:59:58+00:00","article_modified_time":"2024-03-28T21:59:59+00:00","og_image":[{"width":1024,"height":1024,"url":"https:\/\/anti-forensics.com\/blog\/wp-content\/uploads\/2024\/03\/anti-forensics.com-lsb-steganography-in-python.jpg","type":"image\/jpeg"}],"author":"Max","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Max","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/#article","isPartOf":{"@id":"https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/"},"author":{"name":"Max","@id":"https:\/\/anti-forensics.com\/blog\/#\/schema\/person\/ac3dd160cb42b1409a2a55dea58beec2"},"headline":"LSB (Least Significate Bit) Steganography in Python using PNG Files","datePublished":"2024-03-28T21:59:58+00:00","dateModified":"2024-03-28T21:59:59+00:00","mainEntityOfPage":{"@id":"https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/"},"wordCount":779,"commentCount":0,"publisher":{"@id":"https:\/\/anti-forensics.com\/blog\/#organization"},"image":{"@id":"https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/#primaryimage"},"thumbnailUrl":"https:\/\/anti-forensics.com\/blog\/wp-content\/uploads\/2024\/03\/anti-forensics.com-lsb-steganography-in-python.jpg","keywords":["lsb","python","steganography"],"articleSection":["Digital Forensics","Software\/Code"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/","url":"https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/","name":"LSB (Least Significate Bit) Steganography in Python using PNG Files - Anti-Forensics.com","isPartOf":{"@id":"https:\/\/anti-forensics.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/#primaryimage"},"image":{"@id":"https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/#primaryimage"},"thumbnailUrl":"https:\/\/anti-forensics.com\/blog\/wp-content\/uploads\/2024\/03\/anti-forensics.com-lsb-steganography-in-python.jpg","datePublished":"2024-03-28T21:59:58+00:00","dateModified":"2024-03-28T21:59:59+00:00","description":"Using LSB Steganography in Python to hide a message in a PNG. Input and extract hidden messages using Least Significant Bit Steganography.","breadcrumb":{"@id":"https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/#primaryimage","url":"https:\/\/anti-forensics.com\/blog\/wp-content\/uploads\/2024\/03\/anti-forensics.com-lsb-steganography-in-python.jpg","contentUrl":"https:\/\/anti-forensics.com\/blog\/wp-content\/uploads\/2024\/03\/anti-forensics.com-lsb-steganography-in-python.jpg","width":1024,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/anti-forensics.com\/blog\/lsb-steganography-in-python-using-png-files\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/anti-forensics.com\/blog\/"},{"@type":"ListItem","position":2,"name":"LSB (Least Significate Bit) Steganography in Python using PNG Files"}]},{"@type":"WebSite","@id":"https:\/\/anti-forensics.com\/blog\/#website","url":"https:\/\/anti-forensics.com\/blog\/","name":"Anti-Forensics.com","description":"Rendering Digital Investigations Irrelevant","publisher":{"@id":"https:\/\/anti-forensics.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/anti-forensics.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/anti-forensics.com\/blog\/#organization","name":"Anti-Forensics.com","url":"https:\/\/anti-forensics.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/anti-forensics.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/anti-forensics.com\/blog\/wp-content\/uploads\/2024\/01\/cropped-anti-forensics.com_.jpg","contentUrl":"https:\/\/anti-forensics.com\/blog\/wp-content\/uploads\/2024\/01\/cropped-anti-forensics.com_.jpg","width":512,"height":512,"caption":"Anti-Forensics.com"},"image":{"@id":"https:\/\/anti-forensics.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/groups\/14345620\/"]},{"@type":"Person","@id":"https:\/\/anti-forensics.com\/blog\/#\/schema\/person\/ac3dd160cb42b1409a2a55dea58beec2","name":"Max","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/7ca31cae39a49ab947496651bc5c75ee545a72f31c02db1a5c31f80b28714601?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7ca31cae39a49ab947496651bc5c75ee545a72f31c02db1a5c31f80b28714601?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7ca31cae39a49ab947496651bc5c75ee545a72f31c02db1a5c31f80b28714601?s=96&d=mm&r=g","caption":"Max"},"description":"Anti-forensics involves attempts to hide data, damage the confidentiality, integrity, and availability of data in an effort to make analysis and examination of this data (evidence) difficult or impossible.","sameAs":["https:\/\/anti-forensics.com\/blog","https:\/\/facebook.com\/stercutis","https:\/\/linkedin.com\/in\/jesse-shelley"],"url":"https:\/\/anti-forensics.com\/blog\/author\/realjesseshelley_hkwwlra2\/"}]}},"_links":{"self":[{"href":"https:\/\/anti-forensics.com\/blog\/wp-json\/wp\/v2\/posts\/467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/anti-forensics.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/anti-forensics.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/anti-forensics.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/anti-forensics.com\/blog\/wp-json\/wp\/v2\/comments?post=467"}],"version-history":[{"count":7,"href":"https:\/\/anti-forensics.com\/blog\/wp-json\/wp\/v2\/posts\/467\/revisions"}],"predecessor-version":[{"id":476,"href":"https:\/\/anti-forensics.com\/blog\/wp-json\/wp\/v2\/posts\/467\/revisions\/476"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/anti-forensics.com\/blog\/wp-json\/wp\/v2\/media\/468"}],"wp:attachment":[{"href":"https:\/\/anti-forensics.com\/blog\/wp-json\/wp\/v2\/media?parent=467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/anti-forensics.com\/blog\/wp-json\/wp\/v2\/categories?post=467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/anti-forensics.com\/blog\/wp-json\/wp\/v2\/tags?post=467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}