Как можно перевести на Python 10 строчку этого Cygwin кода?
- wget http:// feed.twirpx.com/hash-feed.dat
- dd if=hash-feed.dat of=txt.md5 skip=8 bs=1 count=16
- hexdump -C txt.md5
- dd if=hash-feed.dat of=gz.md5 skip=24 bs=1 count=16
- hexdump -C gz.md5
- dd if=hash-feed.dat of=enc.md5 skip=40 bs=1 count=16
- hexdump -C enc.md5
- dd if=hash-feed.dat of=hash-feed.enc skip=1 bs=56
- md5sum hash-feed.enc
- openssl enc -d -des-cbc -iv CA48533E8F405053 -K CA48533E8F405053 -in hash-feed.enc -out hash-feed.gz
- md5sum hash-feed.gz
- gunzip -c hash-feed.gz > hash-feed.txt
- md5sum hash-feed.txt
Это у меня появилось в результате следующей беседы с админом Твирпкса:
я писал(а):
Здравствуйте, уважаемый Админ!
Мне не совсем понятно, что делает ваша программа DupCheck (
https://github.com/twirpx/twirpx-com-pu ... Program.cs) со скачанной датабазой? Если не трудно, то, пожалуйста, разьясните мне.
Спасибо!
Админ писал(а):
Расшифровывает и разжимает список хешей имеющихся файлов. Затем сверяет хеши с файлами в заданной папке.
я писал(а):
А каким образом программа расшифровывает список хешей?
Админ писал(а):
Через DESCryptoServiceProvider
я писал(а):
А как она проверяет подпись датабазы, ее хеш и какая датабаза получается в конце?
Админ писал(а):
Сравнивает хеш скачанного файла базы данных с эталоном.
я писал(а):
А откуда она берет эталон, как проверяет подпись и какая база получается в конце?
Админ писал(а):
Скачанный файл = 8 байт сигнатура + 16 байт md5 хэш txt-потока + 16 байт md5 хэш gzip-потока + 16 байт md5 хэш шифрованного потока + собственно шифрованный поток.
gzip-поток = расшифровать_DES(шифрованный поток, ключ)
ключ = 5350408F3E5348CA
txt-поток = разархивировать_GZIP(gzip-поток)
txt-поток:
file_id size hash1 hash2 ... hashN
file_id size hash1 hash2 ... hashN
file_id size hash1 hash2 ... hashN
file_id size hash1 hash2 ... hashN
я писал(а):
А как может быть такой ключ? Ведь DES использует 8-байтный ключ?
Админ писал(а):
53 50 40 8F 3E 53 48 CA
А это сколько по вашему байтов?
я писал(а):
Тогда хеш не совпадает:
Хеш от gzip-потока - 90 21 12 52 175 4 125 99 25 42 12 248 124 230 48 191.
Байты с 25 позиции по 40: 86 36 45 8 177 99 92 99 175 229 150 99 91 105 169 48.
Админ писал(а):
Значит неправильно читаете ключ. Возможно задом наперед)
я писал(а):
Ключ правильный.
Сейчас пересчитаю.
Админ писал(а):
Или IV не выставляете = ключу (это так себе, конечно, практика, но, тем не менее, это реализовано именно так).
Ну или режимы неправильные - в программе используются дефолтный для .NET режим CBC PKCS7.
я писал(а):
Я пробовал несколько режимов (включая CBC).
А что такое IV?
Админ писал(а):
[url]Initialization_vector_(IV)[/url]
я писал(а):
Хорошо, и какой IV?
А, равно ключу.
Сейчас проверю такой вариант.
Все равно не то.
Админ писал(а):
Вот вам разбор из linux/cygwin командной строки:
Код:
wget http:// feed.twirpx.com/hash-feed.dat
dd if=hash-feed.dat of=txt.md5 skip=8 bs=1 count=16
hexdump -C txt.md5
dd if=hash-feed.dat of=gz.md5 skip=24 bs=1 count=16
hexdump -C gz.md5
dd if=hash-feed.dat of=enc.md5 skip=40 bs=1 count=16
hexdump -C enc.md5
dd if=hash-feed.dat of=hash-feed.enc skip=1 bs=56
md5sum hash-feed.enc
openssl enc -d -des-cbc -iv CA48533E8F405053 -K CA48533E8F405053 -in hash-feed.enc -out hash-feed.gz
md5sum hash-feed.gz
gunzip -c hash-feed.gz > hash-feed.txt
md5sum hash-feed.txt