Я пытаюсь имитировать в Go функциональность, доступную в библиотеке python (https://pypi.org/project/scrypt/) для расшифровка дайджест, сгенерированный скриптом (с правильным паролем).
Кажется, что библиотека go предоставляет только одну функцию для шифрования данных, где, как кажется, эта библиотека python предоставляет не только это, но и способ перевернуть / расшифровать дайджест, а также предоставить функцию для использования scrypt для более простого-хэширование.
Я не эксперт по безопасности, и я не понимаю математики / чисел, поэтому мне кажется, что я пытаюсь воспроизвести эту библиотеку python вне моего понимания. Я предполагаю, что это возможно, потому что pythonбиблиотека, кажется, достигла этого.
Кто-нибудь знает, с чего бы я вообще приступил к решению этой проблемы? Или будьте достаточно любезны, потратив время на то, чтобы предоставить какую-то форму примера кода, чтобы помочь мне.Спасибо.
Обновление
Функция scrypt по сути является хеш-функцией и использует пароль в качествеспособ получения дайджеста: это означает, что не должно быть способа извлечь исходное сообщение (сообщение, которое было хэшировано).
Таким образом, при таком понимании имеет смысл, что интерфейс Голанга для scrypt нене поддерживает такие функции, как decrypt
.Но тогда как работает функция decrypt
py-script ?
Что ж, если я оглянемся на https://www.tarsnap.com/scrypt.html, то в нем говорится, что исполняемый файл scrypt предоставляет «утилиту шифрования»...
Простая утилита шифрования на основе пароля доступна в качестве демонстрации функции получения ключа scrypt.Утилита scrypt может быть вызвана как scrypt enc infile [outfile]
для шифрования данных (если outfile
не указано, зашифрованные данные записываются в стандартный вывод), или как scrypt dec infile [outfile]
для дешифрования данных (если outfile
не указано,дешифрованные данные записываются в стандартный вывод).
... и после проверки py-script я вижу, что он встраивает версию исполняемого файла scrypt, то есть py-script вызывает * 1037 исполняемого файла* и dec
функции.
Так что, хотя я не обязательно знаю, как создается утилита шифрования tarsnap и что она делает под прикрытием (например, какой алгоритм шифрования используется), фактом является то, что scryptдействительно предназначен только для получения ключа, и этот дайджест-вывод используется этими дополнительными функциями tarsnap таким образом, чтобы поддерживать шифрование / дешифрование.