A method for encoding a digital image, comprising: capturing a digital image comprising a plurality of pixel rows; partitioning the digital image into a first plurality of pixel rows, a second plurality of pixel rows, and a remaining pixel row; generating a first code from the first plurality of pixel rows by: extracting first pixel data from the first plurality of pixel rows; hashing the first pixel data using a first hashing function to generate a first hash code; selecting a first character of the first hash code; randomly selecting a first randomly-ordered character set from an ordered plurality of randomly ordered-character sets, wherein each character in the first randomly-ordered character set is assigned a position code; matching the first character of the first hash code to a corresponding character in the first randomly ordered character set; and replacing the first character of the first hash code with a character from a reference character set at the position code of the corresponding character in the first randomly-ordered character set; overlaying the second plurality of pixel rows with an image representing the first code; generating a second code from the second plurality of pixel rows; generating a third code based on the first code and the second code; and encoding the first code, the second code and the third code into the remaining row of pixels. capturing a digital image comprising a plurality of pixel rows; partitioning the digital image into a first plurality of pixel rows, a second plurality of pixel rows, and a remaining pixel row; generating a first code from the first plurality of pixel rows by: extracting first pixel data from the first plurality of pixel rows; hashing the first pixel data using a first hashing function to generate a first hash code; selecting a first character of the first hash code; randomly selecting a first randomly-ordered character set from an ordered plurality of randomly ordered-character sets, wherein each character in the first randomly-ordered character set is assigned a position code; matching the first character of the first hash code to a corresponding character in the first randomly ordered character set; and replacing the first character of the first hash code with a character from a reference character set at the position code of the corresponding character in the first randomly-ordered character set; extracting first pixel data from the first plurality of pixel rows; hashing the first pixel data using a first hashing function to generate a first hash code; selecting a first character of the first hash code; randomly selecting a first randomly-ordered character set from an ordered plurality of randomly ordered-character sets, wherein each character in the first randomly-ordered character set is assigned a position code; matching the first character of the first hash code to a corresponding character in the first randomly ordered character set; and replacing the first character of the first hash code with a character from a reference character set at the position code of the corresponding character in the first randomly-ordered character set; overlaying the second plurality of pixel rows with an image representing the first code; generating a second code from the second plurality of pixel rows; generating a third code based on the first code and the second code; and encoding the first code, the second code and the third code into the remaining row of pixels.