确定ROT编码

2024-10-02 20:33:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我要根据ROT的编码类型来判断是正确的。在

另外,我还发现了以下代码,可以将rot13“sbbone”正确解码为“foobart”:

import codecs
codecs.decode('sbbone', 'rot_13')

问题是我想对一个已有的rot13编码的文件运行这个python文件。(例如rot13.py编码.txt). 在

谢谢你!在


Tags: 文件代码pyimporttxt类型编码解码
2条回答

要回答第一个问题的第二部分,解码ROT-x中的内容,可以使用以下代码:

def encode(s, ROT_number=13):
    """Encodes a string (s) using ROT (ROT_number) encoding."""
    ROT_number %= 26  # To avoid IndexErrors
    alpha = "abcdefghijklmnopqrstuvwxyz" * 2
    alpha += alpha.upper()
    def get_i():
        for i in range(26):
            yield i  # indexes of the lowercase letters
        for i in range(53, 78):
            yield i  # indexes of the uppercase letters
    ROT = {alpha[i]: alpha[i + ROT_number] for i in get_i()}
    return "".join(ROT.get(i, i) for i in s)


def decode(s, ROT_number=13):
    """Decodes a string (s) using ROT (ROT_number) encoding."""
    return encrypt(s, abs(ROT_number % 26 - 26))

要回答第一个问题的第一部分,找到任意编码字符串的rot编码,您可能需要使用暴力。使用所有的rot编码,并检查哪一个最有意义。一种快速的(-ish)方法是获取一个以空格分隔的(例如cat\ndog\nmouse\nsheep\nsay\nsaid\nquick\n...,其中\n是一个换行符)文件,其中包含英语中最常见的单词,然后检查哪个编码中单词最多。在

^{pr2}$

在Unix计算机上可以使用的文件是^{},也可以在here中找到它

好吧,你可以逐行读取文件并解码。 输出应转到输出文件:

import codecs
import sys


def main(filename):
    output_file = open('output_file.txt', 'w')
    with open(filename) as f:
        for line in f:
            output_file.write(codecs.decode(line, 'rot_13')) 
    output_file.close()

if __name__ == "__main__":
    _filename = sys.argv[1]
    main(_filename)

相关问题 更多 >