首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混合字母表密码

混合字母表密码
EN

Cryptography用户
提问于 2019-05-29 07:29:30
回答 1查看 1.4K关注 0票数 2

免责声明:这实际上是一个编码挑战,因此我明确不寻求完整的解决方案。

密码的工作方式如下:

ABCDEFGHIJKLMNOPQRSTUVWXYZ和关键字KEYWORD开始。我们构建我们的第一个字母表,在关键字的每一个字母周围依次移动上面的字母表。即:

第一个字母K,字母表变成LMNOPQRSTUVWXYZKABCDEFGHIJ

第二个字母E,字母表变成FGHIJELMNOPQRSTUVWXYZKABCD

等等,直到我们得到初始密码字母表:YFGHIJELMNRPQDSTUVOXWZKABC

为了加密,我们使用这个字母表,对于纯文本中的每个字母,执行与在开始阶段围绕纯文本字母(因此,如果明文的第一个字母是F )执行相同的洗牌操作,您将得到J作为第一个密文字母,而您的新字母表将是GHIJELMNRPQDSTUVOXWZKABCFY

我该怎么解决这个问题?我认为已知的明文攻击,因为我很可能知道明文的开头,也知道在解决方案中只有有限数量的可能单词。

经过进一步的研究,我发现了一个晦涩的密码混沌密码,它朝这个方向发展。

编辑:较长的示例(还使用keyword作为关键字):

doyouthinkthereisanotherwaytosolvethiscipher

变成了

HFUTLNAQYWHBWBEBTIEXWSZFGZQPINTQGHKDSVVVPXNM

第二次编辑:用于测试它的python代码

代码语言:javascript
复制
class ScrabbleCipher:
    def __init__(self, keyword):
        self.alpha = string.ascii_uppercase
        self.keyword = keyword.upper()
        self.initialAlpha()

    def initialAlpha(self):
        for i in self.keyword:
            self.shuffle(i)
        self.initial = self.alpha


    def shuffle(self, letter):
        try:
            tg = self.alpha.index(letter)
        except Exception as e:
            print letter
        self.alpha = self.alpha[tg+1:] + letter + self.alpha[:tg]


    def encrypt(self, plaintext):
        self.alpha = self.initial
        plaintext = plaintext.upper()
        ciphertext = ''
        for i in plaintext:
            pos = string.ascii_uppercase.index(i)
            ciphertext += self.alpha[pos]
            self.shuffle(i)
        return ciphertext

    def decrypt(self, ciphertext):
        ciphertext = self.sani(ciphertext)
        self.alpha = self.initial
        plaintext = ''
        for i in ciphertext:
            pos = self.alpha.index(i)
            corLet = string.ascii_uppercase[pos]
            plaintext += corLet
            self.shuffle(corLet)
        return plaintext
EN

回答 1

Cryptography用户

发布于 2019-05-31 07:34:37

因此,我找到了一种方法,但这既不是优雅的,也不是一般的解决方案。它依赖于(沉重的)假设,即最初选择的关键字是英语,第二个假设是,得到的密码文本也是英语。然后,它就变成了一种相对粗糙的蛮力练习:

1)选择一个英语单词

2)创建一个由该单词实例化的密码

3)使用该密码解密密码文本。

4)检查解密后的明文是否包含英文单词。

使用一个相对较大的单词列表(400 K),大约花了30-40秒才打破,关键字本身有9个字符长。因此,如果关键字是随机的,解决方案将是完全不切实际的(顺便说一句,这是这个挑战的第二部分,因此,如果我也解决了这个问题,我将更新这个答案)。

票数 2
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/70888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档