Разработка эффективной функции сокращения для генерации радуги - PullRequest
0 голосов
/ 18 октября 2018

Хорошо, я знаю, что мое пространство паролей соответствует следующему: pattern = re.compile ('[AZ, az] {6,8} [0-9] {1,2} $')

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

Моя текущая функция сокращения в неитеративной форме:

#decToCharDictionary takes a number 0-52 and returns a char assigned to it from a-Z
def reduce(hashVal, decToCharDictionary):
    newPass = ""
    baseCharLength = 6
    baseNumLength = 1

    #this portion allows passwords of 6-8 letters with 1-2 numbers to be uniform to all possible passwords
    letterLength = (int(hashVal[1:2], 16) % 3) + 6
    numberLength = (int(hashVal[4:5], 16) % 2) + 1

    baseOffset = 7
    for x in range(letterLength):
        startIndex = baseOffset + (x * 3)
        letterVal = int(hashVal[startIndex: (startIndex + 2)], 16)  % 52
        letter = decToCharDictionary.get(letterVal)
        newPass = newPass + "" + letter

    baseOffset = 2
    for x in range(numberLength):
        startIndex = baseOffset + (x * 3)
        digit = int(hashVal[startIndex: (startIndex + 2)], 16) % 10
        newPass = newPass + "" + str(digit)

    return newPass

Как бы я мог выполнить итерацию этой функции сокращения в соответствии со своими потребностями без снижения производительности, возможно ли вообще выполнить итерацию и избежать коллизий для 256 ссылок в цепочке?

...