алгоритм "Стрибог"
import gostcrypto # https://pypi.org/project/gostcrypto/
def get_hash(s: str) -> str:
encoded = s.encode('cp1251')
hash_obj = gostcrypto.gosthash.new('streebog256', data=encoded)
return hash_obj.hexdigest()
cp1251 косяк
в смысле?
В прямом. Эта кодировка поддерживает очень небольшой набор символов
но там и есть только русские буквы и цифры
Драконить кодировки на каждый шорох — это конечно офигенно эффективно. И выбор кодировки тоже внушает, прямо повеяло госконторой. Это у заказчика шиза или твоё творчество?
драконить в смысле менять? мб правда эффективнее будет заранее у всего файла поменять? а так в ТЗ указано что Стрибог работает именно с такой..
Стрибог работает с байтами же, не?
А чтение твоего файла с n строк скок занимает?
не считал, но я говорю, при замене стрибога на тождественный get_hash тоже оч быстро работает, так что ты был прав
Стрибог работает с потоком байтов (которые ты и получаешь). В каком виде там будет текст — вопрос отдельный. Ты что-то к ТЗ от себя пытаешься сочинять. Исходный файл в какой кодировке?
то есть переводить никуда не нужно, если там рус буквы то ничего не поменяется при вызове encode?
Кодировки работают не так
Э... Давай ты сходишь почитать о том, что такое кодировки и как с ними работать. А то наблюдается чистый лист в ответственном месте...
да, понял что я не так говорю. я же читаю строку из csv, а нужно передать стрибогу байты. так что в вызове encode не может быть узкого места, этот вызов неизбежен, верно?
Может. Если тебе нужны будут байты, ты можешь забить на преобразования в строку и читать в бинарном режиме. Единственное, не помню, как csv к этому отнесётся. Ну и плюс смена кодировки с utf-8 на cp1251 (фиг пойми, обоснованная ли). В любом случае, есть варианты.
на самом деле чтение из файла это тестовое, в основном будет читаться из БД. в этом случае вызов s.encode('cp1251') ведь неизбежен, верно?
почему?)
Средства шифрования сертифицируется. Рано или поздно заказчик либо сам об этом вспомнит, либо ему намекнут.
Лучше делать по тз тогда
не очень понял мысль, ну ладно.. я о том есть ли более простой вызов для строки. похоже что нет. тогда единств способ ускорить видимо правда распараллеливание (если будут требовать)
в тз указан Стрибог и что он работает с 1251. в этом его вызове ведь нет явных косяков с учетом этих требований? https://t.me/ru_python/2167263
Сложно искать косяки когда мы видим 3 строки текста
"в виде хэш-кода, вычисляемого в соответствии с межгосударственным стандартом ГОСТ 34.11-2018 «Информационная технология. Криптографическая защита информации. Функция хэширования». Длина хэш кода – 256 бит. Кодировка информации, подлежащей хэшированию – Windows-1251"
ГОСТовское шифрование как правило требуется всяким связанным с госструктурами заказчиками. При этом есть нормативка, говорящая о том, что используемые в таких случаях средства шифрования должны быть сертифицированы. Иначе они потом проверку не пройдут. Может, конечно, и глаза в итоге закроют, но если нормально проверять будут — нет. Та библиотека, которую ты показал — не сертифицирована, поэтому весьма вероятно, что придётся менять на какой-нибудь криптопро или ещё что подобное. Их несколько и в основном они на базе openssl.
Обсуждают сегодня