Как я могу разделить канал на 16-байтовые последовательности?

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

Я действительно не нахожу, что Gnome является медленным и чрезмерно увеличенным в размерах, но я не слишком доволен направлением, это недавно пошло с оболочкой Gnome 3. Gnome довольно прост по сравнению с KDE, но совсем не как настраиваемое, и это становится менее настраиваемым, это кажется.

Я нахожу, что KDE излишество, и я никогда не проводил достаточно времени для чувствования себя довольного им. Это имеет много опций, виджетов, и т.д., и конечно, некоторые люди любят его за это. KDE может также иметь большую часть множества (собственных) доступных приложений, но я не использовал его достаточно для реального знания.

Из Вашего сообщения я думаю, что необходимо посмотреть на XFCE. Это наименее чрезмерно увеличено в размерах из главным образом полнофункциональных сред без большого количества отдельно оплачиваемых предметов. Это выполнит большую часть того же самого, которое выполняет Gnome, поскольку это использует тот же инструментарий GTK, я думаю.

Однако возможно запустить приложения KDE с помощью Gnome, и т.д. для покупки Вас должно также установить любые библиотеки поддержки, и т.д. требуются для них. Большому количеству людей не нравится делать это, но если у Вас есть много дискового пространства, оно прекрасно, вероятно.

Будучи новым, я рекомендовал бы придерживаться основного дистрибутива как Fedora, Ubuntu, Debian, и т.д., поскольку стороннее программное обеспечение, более вероятно, будет иметь легкую установку для их программ.

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

3
08.07.2013, 19:45
5 ответов

С недавним выходом Linux (или любая система с недавним GNU coreutils), звонить split --filter.

<decrypted.bin split -b 16 --filter='openssl --args "$FILE" >> decrypted.bin'

Независимо-зашифрованные-блоки походят на ЕЦБ, таким образом, openssl enc -d aes-128-ecb может быть тем, что Вы после.

Если у Вас есть странный режим, который не поддерживает openssl инструмент командной строки, можно быть более обеспеченным использованием инструмента, который поддерживает тот странный режим. (Если Вы описываете режим, я могу предлагать предложения.)

Вы, надо надеяться, знаете, что уже, но если Вы не используете стандартный режим (кроме ЕЦБ), Ваше шифрование, вероятно, небезопасно.

1
27.01.2020, 21:11

Я полагаю, что можно использовать вместо этого dd

dd позволяет Вам читать из файла и отправил вывод туда, где Вы хотите указать также blocksize.

из страницы справочника

Копия ОПИСАНИЯ файл, преобразовывая и форматируя согласно операндам.

   bs=BYTES
          read and write up to BYTES bytes at a time

Таким образом, я предполагаю это

dd if=encrypted.bin bs=16|openssl --args >> decrypetd.bin

должен работать на Вас. Хотя я не сделал протестировал его с openssl.

Обновление на основе комментария от jordamn (благодарит jordamn),

Встроенный путь не передает все по каналу широкая горная долина в openssl, вместо этого передает 16 частей блока по каналу.

#Get the file size in bytes
total=`ls -l encrypted.bin|awk '{print $5}'`
echo  $total;
ret=0;
i=0;
counter=0;
while [ $counter -lt $total ]
do
   #counter to know how many block we read
   counter=$(($i * 16))
   #skip is the number of block based on our setting to skip
   dd if=encrypted.bin skip=$i ibs=16 bs=16 count=1 status=none |openssl --args >> decrypit.bin
   i=$(($i+1))
done
7
27.01.2020, 21:11
  • 1
    Это приведет к тем же результатам как bs=8 так как весь вывод будет отправлен в openssl в одном вызове. –  jordanm 08.07.2013, 15:56
  • 2
    Осторожным с dd. Не передавайте по каналу к нему. unix.stackexchange.com/questions/17295 / … –   08.07.2013, 16:13
  • 3
    @EvanTeitelman, но это - только проблема в отношении ограничения count=x, поскольку это считает неполные блоки. –  frostschutz 08.07.2013, 18:51
  • 4
    @AlexandreAlves: цикличное выполнение и dd skip то же, которое я сделал бы (хотя я не уверен в вопросе здесь). Но вместо ls | awk необходимо использовать stat с %s, и вместо str=dd skip; echo $str | openssl необходимо просто использовать dd skip | openssl непосредственно. О, и Вы, вероятно, увеличиваете i неправильно (если dd входит в шаги 16 байтов, я должен быть увеличен 1 вместо 16, нет?). Серьезно, кто шифрует что-нибудь этот путь? –  frostschutz 08.07.2013, 18:54
  • 5
    файла спасибо за это, я записал подобный сценарий, но был интересно, мог ли я сделать это с единственным каналом и никаким циклом. Если не будет такого пути однако, то я приму это как ответ. –  tjbp 08.07.2013, 19:55

Другой способ распасться и буферизовать поток может состоять в том, чтобы использовать xxd - make a hexdump or do the reverse с -c и -p опции.

# test
n=0
printf '%s' {1..1000} | 
   xxd -p -c 16 | 
   while IFS="" read -r hexstr; do 
      n=$((n+1))
      printf '%s\n' "$n: $hexstr size: $((${#hexstr}/2)) bytes"
      printf '%s' "$hexstr" | xxd -p -r | wc -c
   done


# split up standard output stream in 16 byte blocks to be decrypted
xxd -p -c 16 encrypted.bin | 
   while IFS="" read -r hexstr; do 
      printf '%s' "$hexstr" | xxd -p -r | openssl --args >> decrypted.bin
   done
0
27.01.2020, 21:11

Способ разделить канал на 16-байтовые последовательности без цикличного выполнения через несколько каналов может состоять в том, чтобы использовать инструменты, такие как cstream или mbuffer (в дополнение к уже упомянутому split -b 16 подход).

cstream, например, подобно dd. Это не только имеет a -b num опция установить размер блока, используемый для чтения-записи, но также и a -B num опция буферизовать входной блок до num байты перед записью. -n num опция ограничивает общий объем данных, которые будут скопированы в num байты.

0
27.01.2020, 21:11
[1120021].
0
27.01.2020, 21:11

Теги

Похожие вопросы