OpenSSL, буферизующий проблему

Экранным очищением (который отличается от экранных заставок) управляют dpms установка. У Вас может также быть черная экранная заставка.

xset -dpms
xset s off
3
15.06.2013, 20:44
2 ответа

Вы делаете две вещи неправильно в Вашем примере.

  1. Вы используете блочный шифр. Необходимо будет использовать поточный шифр, такой как rc4 или блочный шифр в режиме CFB (который эффективно превращает его в поточный шифр).
  2. Вы кодируете base64. Как Gilles упомянул, base64 в openssl требует 80-байтового буфера. Устраните кодирование base64, и Вы будете видеть поведение, которое Вы ожидаете.

Пример с aes-128-cfb:

(echo Hello world ; sleep 3) | openssl enc -aes-128-cfb -pass pass:test -bufsize 1 | openssl enc -d -aes-128-cfb -pass pass:test -bufsize 1

Пример с rc4:

(echo Hello world ; sleep 3) | openssl enc -rc4 -pass pass:test -bufsize 1 | openssl enc -d -rc4 -pass pass:test -bufsize 1

Однако я должен указать, что сокращение размера буфера увеличит процессорное время, требуемое выполнить crypto операции:

% time sh -c 'dd if=/dev/urandom bs=8k count=1 | openssl enc -rc4 -pass pass:test | openssl enc -d -rc4 -pass pass:test > /dev/null'
1+0 records in
1+0 records out
8192 bytes transferred in 0.001175 secs (6972350 bytes/sec)
sh -c   0.01s user 0.01s system 167% cpu 0.009 total
% time sh -c 'dd if=/dev/urandom bs=8k count=1 | openssl enc -rc4 -pass pass:test -bufsize 1 | openssl enc -d -rc4 -pass pass:test -bufsize 1 > /dev/null'
1+0 records in
1+0 records out
8192 bytes transferred in 0.001070 secs (7655913 bytes/sec)
sh -c   0.02s user 0.03s system 187% cpu 0.027 total

С буфером 8K это только взяло 0,01 секундам каждого пользователя и системное время, но использование -bufsize 1 занял 0,02 и 0,03 секунды соответственно, общее количество 5x увеличение. Процент использования ЦП сообщил о значении, также увеличенном 20. Если это не проблема для Вас, затем любой ценой используют bufsize 1. Но если это будет, то затем необходимо будет сравнить его для нахождения лучшего размера для приложения.

3
27.01.2020, 21:14

unbuffer и аналогичные решения не работают, потому что задержка не происходит из-за буферизации stdio, это происходит из-за способа, которым openssl программа обрабатывает свои данные.

openssl base64, openssl enc и openssl dec имейте размер буфера по умолчанию 8 КБ, которые могут быть указаны с -bufsize опция. Когда ввод или вывод является base64, размер буфера понижается не далее, чем 80 байтов, потому что openssl хочет смочь обработать полную base64 строку за один раз.

… | openssl aes-256-cbc -pass pass:test -salt -bufsize 16 | …
3
27.01.2020, 21:14

Теги

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