Eu preciso gerar várias senhas aleatórias e encontrei o comando "openssl rand -base64 14" que faz a codificação base64 embutida.
sh-3.2# openssl rand -base64 14
ktMgWKno9AbvRUq4wx0=
Mas, uma vez após a geração, gostaria de descriptografar a senha para o formato utilizável/legível por humanos. Mas, ao decodificar, estou vendo apenas valores não legíveis.
sh-3.2# echo ktMgWKno9AbvRUq4wx0= | base64 --decode
�� X����EJ��sh-3.2#
Como vocês descriptografam e usam?
tl;dr
No método, você encontrou o formato como
ktMgWKno9AbvRUq4wx0=
legível por humanos; isso é exatamente o que você precisa.Resposta detalhada
Um mal-entendido. Duas partes dela:
openssl rand
gera bytes pseudo-aleatórios . Não há garantia de que serão imprimíveis ou legíveis por humanos.Então você pediu (em geral) dados binários codificados como texto.
ktMgWKno9AbvRUq4wx0=
é a forma legível por humanos. Seu comando para "descriptografar" (ou melhor, "decodificar"; Base64 é uma codificação, não criptografia) é válido, mas fornece os dados binários que a ferramenta produziria sem-base64
.Você pode usar o que
openssl rand -base64 14
lhe deu como uma senha legível por humanos. Acho que essa foi a essência da solução que você encontrou. Cada caracterektMgWKno9AbvRUq4wx0=
carrega exatamente 6 bits de entropia da sequência binária original, exceto o imediatamente anterior=
e o=
próprio: a0=
sequência carrega 4 bits. No total você tem 18×6+4 bits de entropia, isto é exatamente 14×8 que você pediu. A cadeia inteira tem 20 caracteres. Para maximizar (dentro do método) a entropia armazenada em 20 caracteres, você deve exigir pelo menos 20x6 bits e pegar os primeiros 20 caracteres. 20x6 é exatamente 15x8, então este comandoirá gerar exatamente os 20 caracteres que você precisa (sem necessidade de truncamento). Esta será uma string legível por humanos com o mesmo comprimento que a em questão, mas com mais 8 bits de entropia nela.
Eu disse "maximizar dentro do método" porque "fora do método" é possível empacotar mais entropia por caractere legível por humanos. Se você permitir caracteres adicionais que não pertençam ao conjunto de caracteres Base64 (por exemplo
%
,_
, ,#
), obterá mais de 6 bits por caractere.Você não pode expandir o método com caracteres adicionais porque "6 bits por caractere" é como a base do Base64. Para obter mais entropia por personagem, você precisa de uma abordagem completamente diferente. Um método que usa todos os 95 caracteres ASCII imprimíveis fornecerá cerca de 6,5 bits de entropia por caractere (estritamente: log 2 95).