def cracked(self):
        """Attempts to crack ciphertext using frequency of letters in English.

        Returns:
            String of most likely message.
        """
        logging.info("Cracking message: {0}".format(self.message))
        entropy_values = {}
        attempt_cache = {}
        message = self.message
        for i in range(25):
            self.message = message
            self.offset = i * -1
            logging.debug("Attempting crack with offset: "
                          "{0}".format(self.offset))
            test_cipher = self.cipher()
            logging.debug("Attempting plaintext: {0}".format(test_cipher))
            entropy_values[i] = self.calculate_entropy(test_cipher)
            attempt_cache[i] = test_cipher

        sorted_by_entropy = sorted(entropy_values, key=entropy_values.get)
        self.offset = sorted_by_entropy[0] * -1
        cracked_text = attempt_cache[sorted_by_entropy[0]]
        self.message = cracked_text

        logging.debug("Entropy scores: {0}".format(entropy_values))
        logging.debug("Lowest entropy score: "
                      "{0}".format(str(entropy_values[sorted_by_entropy[0]])))
        logging.debug("Most likely offset: {0}".format(self.offset))
        logging.debug("Most likely message: {0}".format(cracked_text))

        return cracked_text
Attempts to crack ciphertext using frequency of letters in English.

        Returns:
            String of most likely message.