крапива -pbkdf2 документы он использует HMAC -SHA256 в качестве своей псевдо -случайной функции; два других используют HMAC -SHA1. Nettle имеет реализацию PBKDF2 -HMAC -SHA1, но я не уверен, что вы можете легко получить ее из командной строки. (HMAC -SHA256, как правило, является лучшим выбором, если у вас есть возможность; SHA1 следует избегать ).
(Конечно, вы также не должны использовать 1 итерацию. Я предполагаю, что это только для тестирования.)
Это из-за пули 4 OP, что это работает так, с fd , унаследованным от различных процессов создания/исполнения. Я не пишу все места, где происходит fork/exec. Я, конечно, упрощаю некоторые из них (со встроенным -в командах... ). Ссылки на документацию предоставлены для Linux, но предполагается, что такое же поведение произойдет в любой системе, подобной POSIX или POSIX -.
3>&1
выполняется первой:fd 1, указывающая на терминал, дублируется как fd 3 (обычно используется системный вызовdup2(2)
). pipe(2)
,на следующих доступных fd s :, скажем, 4 и 5. Затем процесс подготовки разветвляется на будущее echo
и будущее cat
. proto -echo dups 5 to 1 ("перезапись" там, где он указывает на :терминал ), закрывает 5 и выполняет echo
, proto -cat dups2 ()4 to 0, закрывает 4 и execs cat
. fd 3 наследуется везде. >&3
делает противоположное пуле 1 :дублирует fd 3 (указывает на клемму )на fd 1. Таким образом, сторона записи канала была заменено и теперь закрыто(dup2(2)
говорит :«Если дескриптор файла newfd был ранее открыт, он автоматически закрывается перед повторным использованием». ). Ничего никогда не будет записано в трубу. Терминал получает test
и отображает его. cat
открывает и усекает файл назначения result
и начинает чтение из канала. Это запускает EOF в соответствии с pipe(7)
, потому что сторона записи закрыта/была закрыта :cat
. Результат:test
на терминале и пустой файл result
.