Você está fazendo duas coisas erradas no seu exemplo.
- Você está usando uma cifra de bloco. Você precisará usar uma cifra de fluxo, como rc4, ou uma cifra de bloco no modo CFB (que efetivamente a transforma em uma cifra de fluxo).
- Você está codificando com base64. Como Gilles mencionou, base64 no openssl requer um buffer de 80 bytes. Elimine a codificação base64 e você verá o comportamento esperado.
Exemplo com 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
Exemplo com rc4
:
(echo Hello world ; sleep 3) | openssl enc -rc4 -pass pass:test -bufsize 1 | openssl enc -d -rc4 -pass pass:test -bufsize 1
No entanto, devo salientar que a redução do tamanho do buffer aumentará o tempo de CPU necessário para executar as operações de criptografia:
% 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
Com um buffer de 8K, o tempo do usuário e do sistema foi de apenas 0,01 segundo, mas usando -bufsize 1
, 0,02 e 0,03 segundos, respectivamente, um aumento total de 5x. O valor relatado da porcentagem de CPU também aumentou em 20. Se isso não for um problema para você, use um tamanho de buffer de 1. Mas, se for, você precisará compará-lo para encontrar o melhor tamanho para sua aplicação. / p>