Пример #1
0
    def demo(self, ui):
        ui.message("===== Demo Mode =====")
        ui.message("Running a small demo/testing!")

        ui.message("--- Encoding ---")
        text = "Hello World!"
        ui.message("Data to cypher: {}\n".format(text))
        ui.message("Octopus cyphered data (binary, octal, decimal and "
                   "hexadecimal utf-8):\n    {}"
                   "".format("\n    ".join(
                       octopus.cypher(text, bases=(2, 8, 10, 16)))))
        ui.message("")

        ui.message("--- Decoding ---")
        ui.message("+ In general, you can let Octopus find which base is "
                   "used.")
        htext = "127145154143157155145041040040040346254242040350277216041"
        ui.message("“Numbers” utf-8 text used as input: {}".format(htext))
        ui.message("The decypherd data is: {}"
                   "".format(octopus.decypher(htext, codec="utf-8")))
        ui.message("")

        htext = "110001011100001011000011110001001100100111000011"
        ui.message("“Numbers” ebcdic text used as input: {}".format(htext))
        ui.message("The decypherd data is: {}"
                   "".format(octopus.decypher(htext, codec="cp500")))
        ui.message("")

        ui.message("+ The input text to decypher may have space-separated "
                   "bytes:")
        htext = "1001111 1100011 1110100 1101111 1110000 1110101 1110011"
        ui.message("“Numbers” ascii-7 text used as input: {}".format(htext))
        ui.message("The decypherd data is: {}"
                   "".format(octopus.decypher(htext, codec="ascii7")))
        ui.message("")

        ui.message("--- Won’t work ---")
        ui.message("+ The input text to decypher must contain only valid "
                   "digits for the given base:")
        htext = "011001010111211101101100015000110110111101101101011a" \
                "001010010001"
        ui.message("“Numbers” text used as binary input: {}".format(htext))
        try:
            ui.message("The decypherd data is: {}"
                       "".format(octopus.decypher(htext, codec="ascii",
                                                  base=2)))
        except Exception as e:
            ui.message(str(e), level=ui.ERROR)
        ui.message("")

        ui.message("+ The input text to decypher must have an integer number "
                   "of “bytes” (once spaces have been striped):")
        htext = "01100101 0110111 0110110 0110011 0110111 0101101 0110011 " \
                "0000001"
        ui.message("“Numbers” text used as input: {}".format(htext))
        try:
            ui.message("The decypherd data is: {}"
                       "".format(octopus.decypher(htext, codec="ascii",
                                                  base=2)))
        except Exception as e:
            ui.message(str(e), level=ui.ERROR)
        ui.message("")

        ui.message("+ Auto-detection of the base might fail, especially with "
                   "short messages. In the example below (decimal EBCDIC), as "
                   "there are no '8' nor '9', the tool detect it as octal.")
        htext = "131136133131146064137163064150164163"
        ui.message("“Numbers” EBCDIC text used as input: {}".format(htext))
        ui.message("The auto-detected decypherd data is: {}"
                   "".format(octopus.decypher(htext, codec="cp500")))
        ui.message("The decimal decypherd data is: {}"
                   "".format(octopus.decypher(htext, codec="cp500", base=10)))
        ui.message("")

        ui.get_choice("", [("", "Go back to $menu", "")], oneline=True)
Пример #2
0
    def demo(self, ui):
        ui.message("===== Demo Mode =====")
        ui.message("Running a small demo/testing!")

        ui.message("--- Encoding ---")
        text = "Hello World!"
        ui.message("Data to cypher: {}\n".format(text))
        ui.message("Octopus cyphered data (binary, octal, decimal and "
                   "hexadecimal utf-8):\n    {}"
                   "".format("\n    ".join(octopus.cypher(text,
                                                       bases=(2, 8, 10, 16)))))
        ui.message("")

        ui.message("--- Decoding ---")
        ui.message("+ In general, you can let Octopus find which base is "
                   "used.")
        htext = "127145154143157155145041040040040346254242040350277216041"
        ui.message("“Numbers” utf-8 text used as input: {}".format(htext))
        ui.message("The decypherd data is: {}"
                   "".format(octopus.decypher(htext, codec="utf-8")))
        ui.message("")

        htext = "110001011100001011000011110001001100100111000011"
        ui.message("“Numbers” ebcdic text used as input: {}".format(htext))
        ui.message("The decypherd data is: {}"
                   "".format(octopus.decypher(htext, codec="cp500")))
        ui.message("")

        ui.message("+ The input text to decypher may have space-separated "
                   "bytes:")
        htext = "1001111 1100011 1110100 1101111 1110000 1110101 1110011"
        ui.message("“Numbers” ascii-7 text used as input: {}".format(htext))
        ui.message("The decypherd data is: {}"
                   "".format(octopus.decypher(htext, codec="ascii7")))
        ui.message("")

        ui.message("--- Won’t work ---")
        ui.message("+ The input text to decypher must contain only valid "
                   "digits for the given base:")
        htext = "011001010111211101101100015000110110111101101101011a" \
                "001010010001"
        ui.message("“Numbers” text used as binary input: {}".format(htext))
        try:
            ui.message("The decypherd data is: {}"
                       "".format(octopus.decypher(htext, codec="ascii",
                                                  base=2)))
        except Exception as e:
            ui.message(str(e), level=ui.ERROR)
        ui.message("")

        ui.message("+ The input text to decypher must have an integer number "
                   "of “bytes” (once spaces have been striped):")
        htext = "01100101 0110111 0110110 0110011 0110111 0101101 0110011 " \
                "0000001"
        ui.message("“Numbers” text used as input: {}".format(htext))
        try:
            ui.message("The decypherd data is: {}"
                       "".format(octopus.decypher(htext, codec="ascii",
                                                  base=2)))
        except Exception as e:
            ui.message(str(e), level=ui.ERROR)
        ui.message("")

        ui.message("+ Auto-detection of the base might fail, especially with "
                   "short messages. In the example below (decimal EBCDIC), as "
                   "there are no '8' nor '9', the tool detect it as octal.")
        htext = "131136133131146064137163064150164163"
        ui.message("“Numbers” EBCDIC text used as input: {}".format(htext))
        ui.message("The auto-detected decypherd data is: {}"
                   "".format(octopus.decypher(htext, codec="cp500")))
        ui.message("The decimal decypherd data is: {}"
                   "".format(octopus.decypher(htext, codec="cp500", base=10)))
        ui.message("")

        ui.get_choice("", [("", "Go back to $menu", "")], oneline=True)
Пример #3
0
    def cypher(self, ui):
        """Interactive version of cypher()."""
        txt = ""
        ui.message("===== Cypher Mode =====")

        while 1:
            done = False
            while 1:
                txt = ui.text_input("Text to cypher to numbers")
                if txt is None:
                    break  # Go back to main Cypher menu.

                try:
                    # Get codec to use.
                    options = [(octopus.DEFAULT, "$utf-8", ""),
                               (octopus.ASCII, "*ascii", ""),
                               (octopus.EBCDIC, "*ebcdic", ""),
                               (octopus.ASCII7, "ascii*7 (binary encode over "
                                "7 bits only)", ""),
                               (None, "or specify another *codec", "")]
                    codec = ui.get_choice("Do you want to use",
                                          options,
                                          oneline=True)
                    if codec is None:
                        codec = ui.get_data("Type the codec you want to use "
                                            "(e.g. 'latin-9'): ")

                    # Get base(s).
                    options = [(2, "$binary", ""), (8, "*octal", ""),
                               (10, "*decimal", ""),
                               (16, "and/or he*xadecimal", "")]
                    bases = ui.get_choice("Do you want to use",
                                          options,
                                          oneline=True,
                                          multichoices=",")

                    txt = octopus.cypher(txt, codec, set(bases))
                    done = True  # Out of those loops, output result.
                    break
                except Exception as e:
                    if utils.DEBUG:
                        import traceback
                        traceback.print_tb(sys.exc_info()[2])
                    ui.message(str(e), level=ui.ERROR)
                    options = [("retry", "*try again", ""),
                               ("menu", "or go back to *menu", "")]
                    answ = ui.get_choice(
                        "Could not convert that data into "
                        "binary, please",
                        options,
                        oneline=True)
                    if answ in {None, "menu"}:
                        return  # Go back to main Sema menu.
                    # Else, retry with another data to hide.

            if done:
                txt = "\n    " + "\n    ".join(txt)
                ui.text_output("Data successfully converted", txt,
                               "Octopus form(s) of data")

            options = [("redo", "*cypher another data", ""),
                       ("quit", "or go back to *menu", "")]
            answ = ui.get_choice("Do you want to", options, oneline=True)
            if answ in {None, "quit"}:
                return
Пример #4
0
    def cypher(self, ui):
        """Interactive version of cypher()."""
        txt = ""
        ui.message("===== Cypher Mode =====")

        while 1:
            done = False
            while 1:
                txt = ui.text_input("Text to cypher to numbers")
                if txt is None:
                    break  # Go back to main Cypher menu.

                try:
                    # Get codec to use.
                    options = [(octopus.DEFAULT, "$utf-8", ""),
                               (octopus.ASCII, "*ascii", ""),
                               (octopus.EBCDIC, "*ebcdic", ""),
                               (octopus.ASCII7, "ascii*7 (binary encode over "
                                                "7 bits only)", ""),
                               (None, "or specify another *codec", "")]
                    codec = ui.get_choice("Do you want to use", options,
                                          oneline=True)
                    if codec is None:
                        codec = ui.get_data("Type the codec you want to use "
                                            "(e.g. 'latin-9'): ")

                    # Get base(s).
                    options = [(2, "$binary", ""),
                               (8, "*octal", ""),
                               (10, "*decimal", ""),
                               (16, "and/or he*xadecimal", "")]
                    bases = ui.get_choice("Do you want to use", options,
                                          oneline=True, multichoices=",")

                    txt = octopus.cypher(txt, codec, set(bases))
                    done = True  # Out of those loops, output result.
                    break
                except Exception as e:
                    if utils.DEBUG:
                        import traceback
                        traceback.print_tb(sys.exc_info()[2])
                    ui.message(str(e), level=ui.ERROR)
                    options = [("retry", "*try again", ""),
                               ("menu", "or go back to *menu", "")]
                    answ = ui.get_choice("Could not convert that data into "
                                         "binary, please", options,
                                         oneline=True)
                    if answ in {None, "menu"}:
                        return  # Go back to main Sema menu.
                    # Else, retry with another data to hide.

            if done:
                txt = "\n    " + "\n    ".join(txt)
                ui.text_output("Data successfully converted", txt,
                               "Octopus form(s) of data")

            options = [("redo", "*cypher another data", ""),
                       ("quit", "or go back to *menu", "")]
            answ = ui.get_choice("Do you want to", options, oneline=True)
            if answ in {None, "quit"}:
                return