Функция проверки SHA1 - PullRequest
       18

Функция проверки SHA1

1 голос
/ 05 апреля 2019

Мой профессор недавно опубликовал пример функции, которую мы можем использовать, которая проверяет входное значение, в данном случае «имя», и запускает несколько тестов, чтобы вернуть либо true, либо false.Однако он как бы бросил нас в глубокий конец в понимании, почему он делает то, что делает.Я понимаю по отдельности, что делают настоящие строки, но я не понимаю, почему они это делают, поэтому, если бы мне объяснили, почему каждая строка делает то, что делает, это было бы очень признательно.Как проходит проверка SHA1?

import hashlib

def enc_check(name):
    hash = hashlib.sha1()
    for i in xrange(10):
        hash.update(name[i::10])
        dig = map(ord, hash.digest())
        if sum(dig[::2]) != sum(dig[1::2]) or sum(dig[:len(dig)/2]) != sum(dig[len(dig)/2:]):
            return False
    return True

1 Ответ

2 голосов
/ 05 апреля 2019

Ничто в этой функции не имеет никакого смысла. Если вы понимаете отдельные строки, вы не пропустите более глубокое значение.

Похоже, что это тест для нахождения какого-то особого значения, которое демонстрирует труднодостижимый набор свойств, в частности, если вы берете каждый десятый символ из входных данных, начиная с индекса 0, то за каждой десятой из индекса 0 следует каждый десятый от индекса 1, и так далее, и так далее, пока вы не получите полные данные из индексов в следующем порядке: 0, 10, ... 10n, 1, 11, ..., 10n + 1, 2, 12, ..., 10n + 2, ......, 9, 19, ..., 10n + 9, что каждая из этих 10 последовательно увеличивающихся строк будет иметь хэш, где:

  1. Сумма четных байтов равна сумме нечетных байтов, и
  2. Сумма первой половины байтов равна сумме последней половины.

Я не знаю точных шансов обоих условий, сохраняющихся для всех 10 хешей, но оно не может быть очень высоким. Я полагаю, у вашего профессора есть пример, который соответствует критериям, но я не знаю, что они ожидают от вас этой чепухи.

...