Моя программа использует хеши для идентификации файлов, некоторые из них повторяются. Как я могу обойти это? - PullRequest
0 голосов
/ 21 июня 2020

извините за беспорядочное название, но я не могу придумать что-то, что действительно описывает то, что здесь происходит. Итак, я делаю программу, которая загружает файлы .cue для ромов Playstation 1. Для этого программа создает SHA-1 ha sh файла и проверяет его в базе данных. Базу данных можно найти в файле «psx.ha sh» в репозитории this . Это работало нормально, но я внезапно наткнулся на очень-очень неприятную проблему. Существует множество файлов с одинаковым ha sh, потому что они, по сути, один и тот же файл.

Позвольте мне немного разобрать проблему. Ромы PSX - это, по сути, файлы cd, и они могут быть в виде треков. Эти дорожки обычно содержат звук, а файл .cue используется, чтобы сообщить эмулятору, где находится каждая звуковая дорожка [в файле dis c]. Итак, что я делаю, так это идентифицирую каждый файл дорожки (на основе их SHA-1 ha sh), проверяю, соответствуют ли они базе данных, а затем создаю ссылку на основе их имени (без текста дорожки), чтобы перейти к исходный файл cue. Затем я читаю текст и добавляю его к реплике, вот и все. Ну, видимо, во многих играх почему-то используется один и тот же трек? Ровно 175 из них введите описание изображения здесь

Итак ... что я могу сделать, чтобы их дифференцировать? Это приводит к проблеме, заключающейся в том, что я получаю неправильный файл cue, когда в игру вступает эта ha sh. Между прочим, это ha sh: "d9f92af296360772e62caa4cb276de3fa74f5538". Я пробовал другие алгоритмы, чтобы увидеть, было ли это невероятно маловероятным совпадением, но нет, все дали одинаковые результаты. SHA-256 дал тот же результат, CR C дал тот же результат, MD5 дал тот же результат (под одним и тем же результатом я имею в виду одно и то же между файлами, конечно, результаты разных алгоритмов для одного и того же файла будут разными). Так что я не знаю, что мне делать. Это гигантская ошибка в моей программе, которую я не знаю, как исправить, любое понимание приветствуется. Боюсь, я плохо объяснил себя, если так, прошу прощения, но мне трудно понять, где я могу быть недостаточно ясным, поэтому, если у вас есть какие-либо сомнения, пожалуйста, спросите.

Стоит отметить что база данных была создана не мной, а redump.org, вот код, который я использую для получения хэшей файлов:

def getSha1(file):
    hashSha1 = hashlib.sha1()
    with open(file, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            hashSha1.update(chunk)
    return hashSha1.hexdigest()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...