Parece que pdfencrypt
requer uma senha codificada de 8 bits (ISO-8859) e não sabe como lidar com (ou seja, converter) senhas UTF-8.
Você deve usar uma codificação de caracteres compatível ao executar pdfencrypt
, para criptografia e descriptografia. ASCII simples ("C") ou ISO-8859-n (como "de_DE.latin1" como sugerido por Hauke Laging) devem funcionar. Na minha opinião, isso apenas instrui pdfencrypt
a usar os caracteres da sua senha (ou seja, nenhuma conversão é necessária), isso é tudo.
Basta adicionar esta linha no topo do seu script:
export LC_ALL=de_DE.latin1 # Or fr_FR, or latin15, or... Any valid locale for your system
Ou alterar esta linha única pode ser suficiente:
LC_ALL=de_DE.latin1 pdfencrypt "$1" -p "$password" -o "$2"
Faça o mesmo para a decodificação.
Se você converter sua senha com iconv
em vez de definir LC_ALL, eu acho que você teria o mesmo problema, pois pdfencrypt
ainda acreditaria que você está dando caracteres UTF-8 quando encontrar os de 8 bits.
De qualquer forma, para facilitar as coisas, você provavelmente deve se ater ao conjunto de caracteres ASCII de 7 bits: espaço, letras não acentuadas, dígitos, pontuação básica, etc. ( man 7 ascii
)
Quanto ao espaço, você deve estar ciente de que a leitura em uma variável específica com ( read -r var
) remove os espaços iniciais e finais (na verdade, os caracteres na variável IFS
da shell). Isso pode ser chato para uma senha. Você deve usar read -r
, que coloca a linha inteira como lida na variável REPLY
.
Isso daria esse código:
export LC_ALL=de_DE.latin1
read -r -s -p "Password: "
echo
pdfencrypt "$1" -p "$REPLY" -o "$2"