【问题标题】:Playfair cipher random key (C#)Playfair 密码随机密钥 (C#)
【发布时间】:2012-04-07 14:41:32
【问题描述】:

需要用shotgnhillclimbing方法解决playfair代码,想简单的先生成随机key,然后用英文字母对freq计算分数。

但我不知道如何生成非重复随机密钥,它是 25!可能性。所以如果我永远使用while,我找到正确密钥的可能性非常小。

我怎样才能生成一个密钥,然后要求编译器不要再次使用它?我使用列表:添加还是删除?或者还有别的吗?或者可能是一个字符串[25!]?

【问题讨论】:

  • 25!大约是 2^83,这与查找 SHA-1 碰撞所需的计算数量大致相同,因此您不采用蛮力路线是正确的:) 我建议不要也使用该字符串,您将用完原子来做到这一点。

标签: c# random cryptography


【解决方案1】:

通常的方法是从一个随机密钥开始,然后在每一步修改它。您可以执行的修改包括:交换两个关键字母、交换两个整行、交换两个整列、围绕中间列反射、围绕中间行反射或围绕两个主要对角线之一反射。在每个步骤中,您都会随机选择一种修改类型和修改位置。

您的随机选择可能对密钥矩阵没有影响。例如,如果您选择交换两行,并为交换的两个操作数选择相同的两行,则键矩阵将保持不变。没关系。两个连续的操作也可能会相互反转,从而将键矩阵返回到其先前状态。那也很好。因为每个决定都是随机做出的,有些会改进关键矩阵,有些会使其变得更糟,所以您的爬山算法将运行得非常好(尽管它可能需要比必要的更多步骤)。

关键是重复随机密钥的概率相当低,如果真的发生也没关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多