Computa o hash bcrypt da linha de comando

13

Gostaria de calcular o hash bcrypt da minha senha.

Existe uma ferramenta de linha de comando de código aberto que faria isso?

Eu usaria esse hash no arquivo de configuração do Syncthing (mesmo que eu saiba aqui que eu pode redefinir a senha editando o arquivo de configuração para remover o usuário e a senha na seção gui e, em seguida, reinicie o Syncthing).

    
por Gabriel Devillers 05.09.2016 / 17:30

3 respostas

15

Você pode (ab) usar o pacote htpasswd do pacote apache-utils , desde que tenha a versão 2.4 ou superior.

htpasswd -bnBC 10 "" password | tr -d ':\n'

-b recebe a senha do segundo argumento de comando
-n imprime o hash para stdout em vez de gravá-lo em um arquivo
-B instrui a usar bcrypt
-C 10 define o bcrypt custo para 10

O comando htpasswd simples é exibido no formato < name >: < hash > seguido por duas novas linhas. Daí a string vazia para o nome e tr retirando os dois pontos e as novas linhas.

O comando gera bcrypt com $2y$ prefixo, o que pode ser um problema para alguns usos, mas pode ser facilmente corrigido por outro sed , pois a variante OpenBSD usando $2a$ é compatível com a variante crypt_blowfish fixa usando $2y$ .

htpasswd -bnBC 10 "" password | tr -d ':\n' | sed 's/$2y/$2a/'

Link para a página de manual do htpasswd: link
Detalhes sobre variantes do bcrypt: link

    
por 26.01.2018 / 15:46
11

Você pode usar uma biblioteca Python. No meu sistema Fedora eu fiz:

sudo dnf search bcrypt

(o sudo é apenas para evitar o desperdício de espaço para um cache dnf do usuário) e, a partir do resultado, pode-se ver que existe um pacote Python2 e Python3:

py-bcrypt.x86_64 : Python bindings for OpenBSD's Blowfish password hashing code
python3-py-bcrypt.x86_64 : Python 3 bindings for OpenBSD's Blowfish password hashing code

Instale a versão do Python2 e liste os arquivos no pacote:

sudo dnf install py-bcrypt.x86_64
rpm -ql py-bcrypt.x86_64

Isso mostra que existe um arquivo /usr/lib64/python2.7/site-packages/bcrypt/__init__.py para que eu possa obter a documentação com

pydoc bcrypt

Isto mostra-me o suficiente para escrever o seguinte comando, que irá alterar a string "password" :

$ python -c 'import bcrypt; print(bcrypt.hashpw("password", bcrypt.gensalt(log_rounds=10)))'
$2a$10$vWFRZgbOx6RKOKYxCTtyWuMJM60E90Vdm/.0nj.X/o3dYUxvQ/2Dm

Para versões posteriores de bcrypt use rounds= em vez de log_rounds= .

    
por 05.09.2016 / 20:32
2

Adicional à resposta de @Disassembler :

  • não é uma boa idéia passar senhas da linha de comando (como a senha pode ser visualizada com ps )
  • 15 é um bom equilíbrio para a velocidade de geração de complexidade / senha

Script de wrapper para htpasswd & bcrypt :

#!/bin/sh

## bcrypt passwd generator ##
#############################
CMD=$(which htpasswd 2>/dev/null)
OPTS="-nBC 15"
USERNAME=$1

usage() {
        local script=$(basename $0)
        cat <<EOF
$script: Generate Bcrypt Hashed Passwords using htpasswd

Usage: $script username
EOF
        exit 1
}

check_config() {
    if [ -z $CMD ]; then
        printf "Exiting: htpasswd is missing.\n"
        exit 1
    fi

    if [ -z "$USERNAME" ]; then
            usage
    fi
}

check_config $USERNAME
printf "Generating Bcrypt hash for username: $USERNAME\n\n"
$CMD $OPTS $USERNAME
exit $?
    
por 15.05.2018 / 15:10