Ru-Board.club
← Вернуться в раздел «Программы»

» WinRAR (часть 2)

Автор: persicum
Дата сообщения: 04.01.2014 06:58
EugeneRoshal

Цитата:
Может со скоростью blake2bp на 32 битах что-нибудь и можно сделать, но 512 бит для массового использования это перебор, а считать 512 и использовать только 256 мне эстетически не нравится


Нужно вспомнить, что внутренняя переменная состояния у blake в два раза длиннее, чем идет на выход.
На выход идет:
v[0] xor v[8]
v[1] xor v[9]
....

На выход идет урезанное в два раза внутреннее состояние, что дает нам моральное право еще дальше урезать -))

Трудно сказать, какой из блейков быстрее, 32 или 64 версии. С применением SSE разница между ними неощутима, проверял на b2sum с sse4.1 под win32.

32 битная версия органично реализуется на SSE, на AVX нужно два инстанса, наверное, чтобы было преимущество.

64 битная версия кривовато реализуется на SSE, на AVX должна органично.

В конечном итоге блейк2bp может быть быстрее, как показывают графики. Но ИМХО для SIMD это все равно. Для ALU версий конечно 64 будет быстрее в два раза. AVX с одним инстансом тоже даст двукратный прирост 64 версии.

Добавлено:

Цитата:
Я эти соображения писал разработчикам BLAKE2 еще прошлой весной. Мне ответили, что они тоже думали на эту тему, но предпочли BLAKE2b в качестве умолчания за простоту и скорость, а будущее покажет.


Все очень просто, можно было ввести свой хеш, например, MDR, и описать его как блейк2bp с начальным наполнением корня дерева 0x14.... , причем берем первые 20 байт результата. А также выложить утилиту mdrsum, чтобы там этот хэш был единственным.

"Как в WinRAR" было бы достаточно для быстрого победоносного шествия такого блейка по планете.

Что касается криптоустойчивости, она бы не пострадала ни на йоту, ИМХО -))
Автор: EugeneRoshal
Дата сообщения: 04.01.2014 09:58
persicum

Цитата:
Все очень просто, можно было ввести свой хеш, например, MDR, и описать его как блейк2bp с начальным наполнением корня дерева 0x14.... , причем берем первые 20 байт результата. А также выложить утилиту mdrsum, чтобы там этот хэш был единственным.

"Как в WinRAR" было бы достаточно для быстрого победоносного шествия такого блейка по планете.

Делать пятый вариант blake, несовместимый с 4-мя от авторов алгоритма. Сомневаюсь, что оно бы взлетело.

Чтобы предлагать стандарты в криптографии, нужен авторитет в этой области. Хэши типа sha и md5 ведь используются и для проверки подлинности файла, при возможности наличия умысла на его подделку, то есть, тут нужен криптографический хэш, а не просто контрольная сумма. Если бы такой хэш был предложен разработчиками blake2 по умолчанию, да, у него был бы шанс. У них есть имя и авторитет в этой области. А WinRAR... Добавил я blake2sp в 5.0, ссылку на сайт с утилитой тоже дал. С победоносным шествием - проблемы Неужели только из-за 256 бит вместо 160. Тогда бы у sha256 не было шансов, но, ведь, пользуются ей.

Впрочем для моих локальных целей в RAR5 достаточно и нынешней ситуации. Да, было бы неплохо, будь blake2sp стандартом и в других утилитах, но и без этого он свою задачу выполняет. CRC32 все-таки имеет малую, но не пренебрежимо малую вероятность не заметить ошибку в силу своей небольшой длины и специфики алгоритма. А если уж мы уходим от стандартного архиваторного CRC32, то разумно уходить сразу на что-нибудь быстрое и криптографическое, чему blake2sp соответствует.
Автор: persicum
Дата сообщения: 04.01.2014 11:11

Цитата:
Делать пятый вариант blake, несовместимый с 4-мя от авторов алгоритма. Сомневаюсь, что оно бы взлетело.  


Думаю, тут некоторое недопонимание. Алгоритма в лучшем случае только два - блейк2b и блейк2s. А их параллельные варианты - это всего лишь деревья. Авторы сделали два предопределенных дерева - 2bp и 2sp. Одно на 4 потока, другое на 8. Но ничего не мешает сделать какие хочешь деревья самим пользователям - в документации написано как это делается плюс картинки примеров деревьев.

Например, можно было бы сделать 8 поточный вариант блейк2bp и брать от него 256-бит результата. Получился бы хеш, похожий на блейк2sp, но в 4 раза еще более быстрый.
Автор: EugeneRoshal
Дата сообщения: 04.01.2014 11:53
persicum

Цитата:
Но ничего не мешает сделать какие хочешь деревья самим пользователям - в документации написано как это делается плюс картинки примеров деревьев.

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

А так, конечно, неплохо бы сделать версию хэша на 64 32-битных или 32 64-битных потока, с учетом AVX2 и возможной 8-миядерности. Но это опять же будет ни с кем не совместимо.
Автор: persicum
Дата сообщения: 04.01.2014 12:38
Зарекаться не следует. Поскольку формат RAR5 открыт для разнообразных хешей, может когда-нибудь появится желание добавить какой-нибудь кастомный блейк или другой алгоритм.
Автор: EugeneRoshal
Дата сообщения: 04.01.2014 12:45
persicum
Да, согласен.
Автор: Krimatorij
Дата сообщения: 04.01.2014 18:12
Люди, часто приходится создавать архив из нескольких файлов с последующим удалением исходных. И каждый раз после создания архива нужно его перемещать в каталог выше, а рабочий (уже пустой) каталог удалять.
Можно ли как-то автоматизировать последние два действия действия?
Автор: Victor_VG
Дата сообщения: 04.01.2014 19:31
Krimatorij

к примеру так: из батника, скрипта или в лоб из консоли: rar a|m <key> ../<archive_name> <files>&&rmdir /s/q * (под недосью) или rar a|m <key> ../<archive_name> <files>&&rm -fR ./* на UNIX.
Автор: Krimatorij
Дата сообщения: 04.01.2014 19:39
Victor_VG
и эту команду надо выполнять из командной строки или в профиль программы можно как-то занести?

Добавлено:
Страницу не обновил, а вы сообщение отредактировали.)

А профиль в программу добавить никак не получится? Дело в том, что придется для каждого архива каждый раз менять команду (имя архива прописывать), тогда уж получится быстрее "руками" делать.
Автор: Ajaja
Дата сообщения: 04.01.2014 20:04
Krimatorij

Цитата:
Люди, часто приходится создавать архив из нескольких файлов с последующим удалением исходных. И каждый раз после создания архива нужно его перемещать в каталог выше, а рабочий (уже пустой) каталог удалять.
Можно ли как-то автоматизировать последние два действия действия?

Запускаешь winrar, заходишь в нужный каталог, выделяешь файлы, жмешь кнопку создания архива, перед именем файла архива ставишь ..\ (например ..\myarchive.rar) и в опциях указываешь галочку удаления файлов после архивирования.
Автор: Krimatorij
Дата сообщения: 04.01.2014 20:10
Ajaja

Цитата:
в опциях указываешь галочку удаления файлов после архивирования.

Для таких случаев у меня создан профиль и никакие галочки ставить нигде не надо.

Цитата:
перед именем файла архива ставишь ..\

Что архив потом мышью перемещать, что слэш ставить - разницы нет, это всё равно в ручную надо делать.

И вы невнимательно прочитали мой вопрос:

Цитата:
Можно ли как-то автоматизировать последние два действия?

Автор: Victor_VG
Дата сообщения: 04.01.2014 20:16
Krimatorij

Запишите команду в батник с ключами сжатия и парой передаваемых ему параметров - имя выходного архива и каталога-источника. А его киньте куда нибудь в путь. В итоге в ОС появится новая команда которую можно хоть через Win+R исполнить или добавить в другой сценарий. Смотря от того, какую задачу в целом вам нужно решить...
Автор: Ajaja
Дата сообщения: 04.01.2014 20:39
Krimatorij
Создай тогда на рабочем столе батник (*.bat), примерно такого содержания:

Код: "путь-к-рару\rar.exe" m -r -ep1 "%~1.rar" "%~1\*"
rmdir %1
Автор: V0lt
Дата сообщения: 04.01.2014 20:41
Создать на рабочем столе файл PackDirAndDel.cmd, со следующим содержимым

Код: CD /D %1
"c:\Program Files\WinRAR\Rar.exe" a -r -df "..\%~nx1.rar" *.*
CD ..
RMDIR %1
pause
Автор: Krimatorij
Дата сообщения: 04.01.2014 20:41
ОС - Windows 7
Victor_VG
Получилась такая команда:

Код: winrar.exe a -r -m5 ../ *.* &&rmdir /s/q *
Автор: Ajaja
Дата сообщения: 04.01.2014 21:04
Krimatorij
Если будете использовать скрипт V0lt-а, добавте кавычки вокруг имени архива. Иначе будут проблемы с каталогами в именах которых есть пробелы.
Автор: Krimatorij
Дата сообщения: 04.01.2014 21:11
Ajaja
Извините, ваше сообщение как-то упустил. Сейчас и ваш вариант попробую.
Автор: Victor_VG
Дата сообщения: 04.01.2014 21:12
V0lt

если указать ей ./* то она удалит только содержимое каталога.

Krimatorij

я бы чуть поменял её:

@echo off&&cd /D %1f&&rar.exe a -r -m5 ../%2.rar ./* &&rmdir /s/q ./*

сделав батником, а ему в качестве параметра %2 передавал бы желаемое имя архива

Автор: Ajaja
Дата сообщения: 04.01.2014 21:27
Victor_VG

Цитата:
rmdir /s/q

А если rar глюканет? Файлы могут потеряться. Мало того, программа может глюкануть так, что после ее выполнения текущим каталогом окажется вовсе не тот каталог, который ожидался, а например C:\Windows Мы же не знаем, что там в rar.exe, во всяком случае вызов SetCurrentDirectory в коде присутствует.
Автор: Krimatorij
Дата сообщения: 04.01.2014 21:27

Цитата:
"c:\Program Files\WinRAR\Rar.exe"
я добавил путь к winrar в переменные среды windows, так что работает и без полных путей.)
Ajaja
Спасибо, всё отлично работает.
Victor_VG

Цитата:
@echo off&&cd /D %1f&&rar.exe a -r -m5 ../%2.rar ./* &&rmdir /s/q ./*
сделав батником, а ему в качестве параметра %2 передавал бы желаемое имя архива

Так а желаемое имя самому надо указывать или архиватор сам его брать откуда-то будет? Просто смысл был в том, чтобы архив принимал имя рабочего каталога (того, где находятся архивируемые данные) без дополнительных указаний пользователя. Ведь рабочих каталогов много и имена у всех разные.
Автор: regist123
Дата сообщения: 04.01.2014 22:02
V0lt 22:41 04-01-2014
Цитата:
Создать на рабочем столе файл PackDirAndDel.cmd, со следующим содержимым

наверно это можно и как пункт контекстного меню оформить. И тогда ПКМ на нужной папке и нужные параметры будет передаваться в батник.
Автор: Krimatorij
Дата сообщения: 04.01.2014 22:39
regist123
Получилось что-то типа:

Код: Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Archive files and remove folder]
"MUIVerb"="Заархивировать и удалить каталог"
"Position"="Top"

[HKEY_CLASSES_ROOT\Directory\shell\Archive files and remove folder\command]
@="\"d:\\scripts\\archive_and_remove.bat\""
Автор: Victor_VG
Дата сообщения: 05.01.2014 00:21
Krimatorij

В моём скрипте мы командуем парадом.
Автор: V0lt
Дата сообщения: 05.01.2014 08:52
Ajaja

Цитата:
Если будете использовать скрипт V0lt-а, добавте кавычки вокруг имени архива. Иначе будут проблемы с каталогами в именах которых есть пробелы.

Спасибо. Поправил.

Krimatorij

Цитата:
Если брать батник, например, V0lt'а, то через контекстное меню архивируется не внутреннее содержимое каталога, а все содержимое в текущем каталоге.

Я написал как использовать мой скрип. Если меняешь условия использования, то смотри что и да как.

Victor_VG

Цитата:
В моём скрипте мы командуем парадом.

В твоем скрипте командует rmdir. Что будет если RAR не сможет создать архивный файл? Правильно, не будет ни архива, ни файлов.
Прелесть удаления через RAR в том, что архиватор удалит файлы только после их успешной упаковки.
Автор: Victor_VG
Дата сообщения: 05.01.2014 13:45
V0lt

Цитата:
В твоем скрипте командует rmdir. Что будет если RAR не сможет создать архивный файл? Правильно, не будет ни архива, ни файлов.
Прелесть удаления через RAR в том, что архиватор удалит файлы только после их успешной упаковки.

Не совсем так - если посмотреть как работает конвейер команд то мы увидим что знаки & задают условие вызова следующей команды пакета в соответствии с логикой обработки события "результат выполнения предыдущей команды":

одиночный & - следующая команда выполняется всегда;
двойной && - следующая команда выполнится только если предыдущая команда завершена успешно, т.е её Errorlevel=0

и потому мы зовём консольный Rar а не GUI WinRAR - консольный архиватор вернёт код возврата, а GUI нет и конвейер команд с GUI не сработает, а с консольным его логика отрабатывает так, как это нужно нам.

Это поведение конвейера команд будет одинаково и на CMD/TCMD/TCC под Windows и на bas/sh/tcsh/zsh под UNIX и для IBM OS/360 MFT где данный механизм появился в начале 60-х как способ реализации пакетных заданий в языке JCL (Job Control Language) поскольку в данной версии ОС использовался механизм "пакетных заданий" когда оператор давал ОС блок команд выполнявшихся в соответствии с определённым алгоритмом без вмешательства человека - всё одно даже выполняющая 10 - 15 тыс. оп/с младшая модель ряда IBM S/360 "думает" быстрее человека - мы делами максимум примерно 3 - 4 оп/с, а машинное время стоит дорого .

P.S.

Сам этот фокус часто использую, к примеру когда надо обновить UNIX системы заменив там несколько сотен пакетов - во первых ошибок меньше, а во вторых быстрее, хотя цепочка команд может быть и на пару листов А4. Просто скинул на машину sh-скрипт, запустил и иди делай другие дела, а он сам всё сделает, даже если ему несколько часов потребуется. Не сидеть же мне всё это время у терминала? В той же FreeBSD 7.2 после установки я к примеру так менял 470 пакетов из 630 и ещё около 300 новых устанавливал - а это около трёх часов работы скрипта.

Автор: Krimatorij
Дата сообщения: 05.01.2014 14:33
А как эти примеры подправить, чтобы из контекстного меню работало. Полтора часа уже мучаюсь. Архивирует не содержимое каталога, а данные из текущего...

Код: @echo off&&cd /D %1f&&rar.exe a -r -m5 ../%2.rar ./* &&rmdir /s/q ./*
Автор: Victor_VG
Дата сообщения: 05.01.2014 14:40
Krimatorij

Мой пример чисто консольный и ему нужно передавать параметры. В контекстном меню он сам по себе не сработает, значит бум думать. Есть одна идея, но там поколдовать надо. Если выйдет, то это будет не скрипт а небольшая программа на NSIS которая будет делать именно то, что мы хотим. С ходу я вижу только её общую логику, а с реализацией надо возится.
Автор: Ajaja
Дата сообщения: 05.01.2014 17:02
Krimatorij

Цитата:

Код: [HKEY_CLASSES_ROOT\Directory\shell\Archive files and remove folder\command]
@="\"d:\\scripts\\archive_and_remove.bat\""
Автор: Krimatorij
Дата сообщения: 05.01.2014 18:04
Ajaja
Да! Вот оно, работает из контекстного меню.

Код: Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Archive files and remove folder]
"MUIVerb"="Заархивировать содержимое и удалить каталог"
"Position"="Top"

[HKEY_CLASSES_ROOT\Directory\shell\Archive files and remove folder\command]
@="\"d:\\scripts\\archive_and_remove_v.3.bat\" \"%1\""
Автор: Ajaja
Дата сообщения: 05.01.2014 18:21
Krimatorij

Цитата:

Код: rar.exe m5 -r -ep1 "%~1.rar" "%~1\*"

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160

Предыдущая тема: Прога для поиска картинок в интернете.


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.