Python 创建一个函数,使用元音=0辅音=1将二进制替换为单词

Python 创建一个函数,使用元音=0辅音=1将二进制替换为单词,python,python-3.x,cryptography,Python,Python 3.x,Cryptography,我正在尝试创建一个python程序来加密(模糊?)二进制代码,这样每个0将成为一个元音,每个1将成为一个辅音,并且将只有完整含义的单词:例如,bin编号10110将成为HELLO。下面的代码是我编写的程序,但我找不到执行“encription”的方法 有什么建议吗?我会生成一个字典,将位掩码映射到相应单词的列表中以供选择。假设您有一个文件words.txt,它如下所示: the quick brown fox jumped over lazy dog def main(): from

我正在尝试创建一个python程序来加密(模糊?)二进制代码,这样每个0将成为一个元音,每个1将成为一个辅音,并且将只有完整含义的单词:例如,bin编号10110将成为HELLO。下面的代码是我编写的程序,但我找不到执行“encription”的方法


有什么建议吗?

我会生成一个字典,将位掩码映射到相应单词的列表中以供选择。假设您有一个文件
words.txt
,它如下所示:

the
quick
brown
fox
jumped
over
lazy
dog
def main():

    from random import choice

    mask = generate_mask()

    values = ["101", "1011", "101", "101"]

    for value in values:
        print(choice(mask[value]))
    
    return 0


if __name__ == "__main__":
    import sys
    sys.exit(main())
此函数读取
words.txt
中的每个单词,将元音映射到
0
,将辅音映射到
1
,并创建-并返回一个字典,其关键字可能是位掩码,相关值是对应单词的列表。我在这里做了一些假设——比如文件将只包含小写字符和分隔单词的换行符

def generate_mask():

    from string import ascii_lowercase as alphabet

    vowels = set("aeiou")
    consonants = set(alphabet) ^ vowels

    mapping = str.maketrans(
        "".join(vowels) + "".join(consonants),
        ("0" * len(vowels)) + ("1" * len(consonants))
    )

    mask = {}

    with open("words.txt", "r") as file:
        for word in map(str.rstrip, file):
            key = word.translate(mapping)
            if key not in mask:
                mask[key] = []
            mask[key].append(word)

    return mask
在本例中,返回的
掩码将是一个字典,如下所示:

{
    '110': ['the'],
    '10011': ['quick'],
    '11011': ['brown'],
    '101': ['fox', 'dog'],
    '101101': ['jumped'],
    '0101': ['over'],
    '1011': ['lazy']
}
>>> 
正如您所看到的,
fox
dog
共享相同的位掩码,因此它们最终位于相同的列表中

然后,你会这样使用它:

the
quick
brown
fox
jumped
over
lazy
dog
def main():

    from random import choice

    mask = generate_mask()

    values = ["101", "1011", "101", "101"]

    for value in values:
        print(choice(mask[value]))
    
    return 0


if __name__ == "__main__":
    import sys
    sys.exit(main())
输出:

dog
lazy
fox
dog
>>> 

那应该行的,谢谢。唯一的问题是找到一种方法来选择我应该将该值除以多少个字符,这样我就可以确定一个适合该值的单词是否存在。您可能需要在数字和字母中添加。偶数数字对应于
0
,奇数数字对应于
1
。这样你就可以填写不适合你的单词表的多余部分。