def decryptMsg(self, newCipher, keybv, totalCipherBlock): decryptedpt = BitVector(size=0) for i in range(0, totalCipherBlock): msg = newCipher[i * self.BLOCKSIZE:(i + 1) * self.BLOCKSIZE] ^ keybv decryptedpt += msg return decryptedpt.get_bitvector_in_ascii()
def decode(self, image_path): """ Attempts to decode message hidden in the image at given path :param image_path: Path to image :return: Hidden message string """ image = Image.open(image_path) image_rgb = image.convert("RGB") bit_string = "" width, height = image.size for j in range(height): for i in range( width ): # Collect message bits until NULL terminator is reached (red, green, blue) = image_rgb.getpixel((i, j)) if len(bit_string ) >= 16 and bit_string[-16:] == "0000000000000000": break else: bit_string += bin(red)[-2:] if len(bit_string ) >= 16 and bit_string[-16:] == "0000000000000000": break else: bit_string += bin(green)[-2:] if len(bit_string ) >= 16 and bit_string[-16:] == "0000000000000000": break else: bit_string += bin(blue)[-2:] else: # If inner loop breaks, break out of outer loop continue break message_bit_vector = BitVector(bitstring=bit_string) return message_bit_vector.get_bitvector_in_ascii()
sample_cipher = [] key = None bv = BitVector(filename="sample_ciphertext.txt") # while (bv.more_to_read): sample_cipher.append(bv.read_bits_from_file(64)) print("\t** Possible Keys **") for k in rows: k = BitVector(bitstring=k[0]) print k.get_bitvector_in_ascii() DES(BitVector(bitstring=k), "sample_plaintext.txt", "test_cipher.txt") if IsCipherEqual(sample_cipher): key = k conn.close() file_out = open("key.txt", "w") key.write_to_file(file_out) message_file = 'target_ciphertext.txt' decrypted_file = 'decrypted.txt' decrypt = True if decrypt: DES(key, message_file, decrypted_file, reverse=True) fr = open('decrypted.txt', 'r')