Quero uma senha segura com base91.
Olá, sou um inútil.
Recentemente, a pergunta 'Você quer que o Chromium/Chrome crie senhas automaticamente?' me deixa muito ansioso, então quero criar senhas que sejam relativamente simples e reversíveis até certo ponto.
A propósito, no caso do Artix Linux, o comando base91 não estava incluído por padrão, então estou assumindo que você já executou yay -S base91.
Conclusão
No final, decidi gerar senhas com isso.
echo -n "string" | sha384sum | awk '{print $1}' | xxd -r -p | base91 | tr -d "\n" && echo
※Pensei nisso depois, mas provavelmente awk '{printf $1}' é melhor.
Divagações
Para ser honesto, eu estava usando strings geradas com sha*sum, e embora eu estivesse satisfeito com o número de caracteres e o valor do hash em si fosse irreversível, eu não me importaria se fosse descoberto.
No entanto, a própria hashificação é apenas uma string hexadecimal, então se um ataque de força bruta sério ocorrer, as strings tratadas seriam [a-z0-9] em termos de expressão regular.
Além disso, hoje em dia, somos instruídos a usar letras maiúsculas e símbolos, o que é terrível da minha parte.
Então, desta vez, quero aumentar o número de padrões de caracteres.
Como isso funciona
Primeiro, vamos desconstruir:
echo -n "string"
Imprime a string para a saída padrão sem uma nova linha, e passa para o próximo comando via pipe.
sha384sum
Faz o hash da string recebida com SHA384.
awk '{print $1}'
A string recebida tem um - extra no final que não é necessário, então é formatada com awk.
xxd -r -p
Eu mesmo descobri isso pesquisando pela primeira vez: ele imprime uma string hexadecimal em formato binário.
Portanto,
ele imprime a string recebida em formato binário.
base91
Codifica o binário recebido com base91 e o imprime.
tr -d "\n" && echo
Como base91 formata automaticamente com quebras de linha, removemos os caracteres de nova linha e, se for bem-sucedido, imprimimos uma linha vazia no final, pois é difícil copiar e colar sem uma quebra de linha.
E fica assim:
alleycat:[haturatu]:~/git/ckr/ckr$ echo -n "a" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" && echo
"OS[fY@wwBqip+$db@5+g!yvk$jE3,M3F({qu]1(_dS2Or()Q:ZqyhOb&9Y
Na verdade, acabei de pensar nisso, então não sei se muitos formulários realmente aceitarão isso.
A propósito, o número de caracteres é:
$ echo -n "a" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" | wc -c
59
Mesmo para uma string curta, 59 caracteres são gerados.
Vantagens
Em primeiro lugar, quando gerado com xxd -r -p, ele pode ser armazenado como dados binários.
Portanto, mesmo que você esqueça a string original, você pode restaurá-la se tiver o binário.
Em termos de etapas:
sha384sum = irreversível
xxd -r -p = reversível
base91 = reversível
É um processo como este.
Ou melhor, a string resultante é mais longa que a frase-senha original, e pensei: 'Não seria melhor tornar a frase-senha original irreversível em um estágio inicial?' E foi assim que cheguei a isso.
Além disso, quando gerado desta forma, parece que não é possível ler o binário com comandos como saslauthdb ou o comando strings usado para depuração de binários.
É seguro o suficiente para ser melhor do que ter dados de texto simples.
A probabilidade de colisão ao fazer hash com shasum é bastante rigorosa.
E como isso é ainda mais codificado em formato Base91 a partir de dados binários, parece ser melhor do que as senhas que eu criaria com meu cérebro limitado.
Adicionar uma função ao .bashrc
Para ser sincero, digitar isso toda vez é um inferno.
funcao_nome() {
echo -n "$1" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" && echo
}
E configurei para que você possa gerar senhas com funcao_nome string.
Se isso ainda for quebrado, sinto que seria como dizer 'desista de ser humano' (referência a Yura Yura Teikoku), ou melhor, 'desista da criptografia'...
E se você quiser aumentar o comprimento da string da própria senha a ser usada no lado do servidor, pode usar sha512; se quiser diminuir o número de caracteres reconhecíveis no bash, pode usar base64.
É fácil de mudar, e você pode simplesmente modificar a função correspondente e adicioná-la ao .bashrc, certo?