criptografar / descriptografar string com erro openssl

4

Eu preciso criptografar e descriptografar uma senha usando o script bash. Para isso, estou usando openssl .

A decodificação é necessária porque estou movendo a senha entre os hosts.

O estranho é que parece que a criptografia tem um tempo de expiração.

Para criptografar (não no script bash):

echo P@$$word| openssl enc -aes-128-cbc -a -salt -pass pass:pass_key

para descriptografar (no script bash):

dec_password=$(echo -n $1 | openssl enc -aes-128-cbc -a -d -salt -pass pass:pass_key)

se eu estiver fazendo a criptografia e executando o script, ele funcionará perfeitamente.
No entanto, se eu estiver fazendo a criptografia e no dia seguinte, executando o script de descriptografia , ele falhará com o erro:

error reading input file

Não tenho certeza se o tempo está relacionado, mas essa é a única variável que mudou.

Alguma ideia? Obrigado

    
por Bar 19.02.2018 / 11:03

2 respostas

4

O erro que você tem depois de esperar algum tempo para descriptografar a senha, e você mencionou que o método "tem um tempo de expiração" é porque o salt gerado aleatoriamente varia com o tempo. (por exemplo, será diferente todos os dias)

Ao criptografar, o primeiro caractere da senha criptografada é o sal usado ao criptografar com um sal; você deve usar o mesmo sal para descriptografar.

Esteja ciente de que, ao tentar criptografar sem sal, no MacOS / mais antigo? versões openssl você tem que usar a palavra-chave -nosalt ; openssl gera e usa um sal por padrão.

Então, para criptografar sem sal, você precisa fazer:

echo P@$$word| openssl enc -aes-128-cbc -a -nosalt -pass pass:pass_key

No entanto, ao armazenar senhas, é uma prática ruim descriptografá-las para compará-las com senhas candidatas; mais tarde, para comparar os scripts , você não os descriptografa :

o que você faz para comparar senhas é criptografar uma senha para verificar com o mesmo salt (se estiver usando salt) e comparar as strings criptografadas para ver se elas correspondem.

Se for para encaminhar senhas entre sistemas e não armazená-las, usar salt não é tão essencial, mas tenha em mente que isso ajuda a mantê-lo mais seguro.

No entanto, caso você tenha strongs necessidades de segurança sobre a força de criptografia, o OpenSSL é conhecido por ter uma força de criptografia fraca e o GnuPG é mais strong do que o openSSL para criptografar.

    
por 19.02.2018 / 11:19
2
$ echo P@$$word
P@74266word

$ echo 'P@$$word'
P@$$word

Lembre-se sempre de citar strings. Além disso, expansões variáveis de aspas duplas, como $1 :

$ ls
a_file

$ variable="a*"

$ echo $variable
a_file

$ echo "$variable"
a*

Além disso, para comparar senhas, você deve comparar as senhas criptografadas, não as descriptografadas. Se um sal é usado, o mesmo sal deve ser usado como foi usado para criptografar a senha original. O OpenSSL armazena isso nos primeiros oito bytes dos dados criptografados.

    
por 19.02.2018 / 11:36