Viginere Cipher Breaking (для выдачи петель) - PullRequest
0 голосов
/ 28 ноября 2018

Так что я пишу некоторый код, чтобы взломать надежный шифр, я в значительной степени там, если, однако, по какой-то причине цикл является хитрым в том смысле, что когда я запускаю код без внешнего цикла для k ключа, который яполучить правильные значения для Чи в квадрате.Однако, как только я поместил цикл в значения неверные, не уверен, что я сделал неправильно, некоторые рекомендации будут туз.

Наименьшее значение должно быть, когда k = 19.

Кодздесь:

import string
alphabet = string.ascii_lowercase

exp_values = [0.0815, 0.0137, 0.0221, 0.0458, 0.1261, 0.0186, 0.0236,0.0685,
            0.0697, 0.0014, 0.0107, 0.0437, 0.0196,   0.0652, 0.0758, 0.014,
            0.0019, 0.0502, 0.0605, 0.0993, 0.0322,   0.0078, 0.0249, 0.0013, 0.0211,
            0.0007]


def chi_square(obs,exp):
    sum = 0
    for i in range(0,len(obs)):
        sum = sum + ( obs[i]- exp[i] )**2 / exp[i]
    return sum

plain = 'blxiiftelbmklwixafhxblipaxaxyvhtpuvrahwdnemvbmofytpxhzxmmwvpmxxxpnowxkhxuaxt'

for k in range(1,25):
    ctext = ''
    for i in plain:
        x = ((ord(i) - 65) + k) % 26
        ctext = ctext + chr(x + 65)
    ctext = ctext.lower()

    freqs = {}
    # Get the count of each letter
    for i in alphabet:
        count = ctext.count(i)
        if count == 0:
            freqs[i] = 0
        else:
            freqs[i] = count

    # Turn the frequency into probabilities
    obs_values = []
    for i in alphabet:
        a = freqs.get(i)/len(ctext)
        obs_values.append(a)

    print('Key =', k,' ', chi_square(obs_values,exp_values))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...