Existe-t-il un outil de ligne de commande open source qui ferait cela?
J'utiliserais ce hachage dans le fichier de configuration Syncthing (même si je sais d'ici que je peux réinitialiser le mot de passe en éditant le fichier de configuration pour supprimer l'utilisateur et le mot de passe dans la section gui, puis redémarrer Syncthing) .
Vous pouvez (ab) utiliser htpasswd
depuis le package Apache-utils , à condition que vous disposiez de la version 2.4 ou supérieure.
htpasswd -bnBC 10 "" password | tr -d ':\n'
-b
prend le mot de passe du deuxième argument de commande-n
imprime le hachage sur stdout au lieu de l'écrire dans un fichier-B
demande d'utiliser bcrypt-C 10
définit le coût de bcrypt sur 10
La commande nue htpasswd sort au format <nom>: <hash> suivi de deux retours à la ligne. D'où la chaîne vide pour le nom et tr
supprimant les deux-points et les retours à la ligne.
La commande génère bcrypt avec $2y$
préfixe, qui peut poser problème pour certaines utilisations, mais peut facilement être corrigé par un autre sed
depuis la variante OpenBSD utilisant $2a$
est compatible avec la variante fixe crypt_blowfish utilisant $2y$
.
htpasswd -bnBC 10 "" password | tr -d ':\n' | sed 's/$2y/$2a/'
Lien vers la page de manuel htpasswd: https://httpd.Apache.org/docs/2.4/programs/htpasswd.html
Détails sur les variantes de bcrypt: https://stackoverflow.com/a/36225192/6732096
Vous pouvez utiliser une bibliothèque Python. Sur mon système Fedora, j'ai fait:
Sudo dnf search bcrypt
(le Sudo est juste pour éviter de gaspiller de l'espace pour un cache dnf utilisateur) et du résultat peut voir qu'il y a un paquet Python2 et 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
Installez la version Python2 et répertoriez les fichiers dans le package:
Sudo dnf install py-bcrypt.x86_64
rpm -ql py-bcrypt.x86_64
Cela montre qu'il existe un fichier /usr/lib64/python2.7/site-packages/bcrypt/__init__.py
pour pouvoir obtenir la documentation avec
pydoc bcrypt
Cela me montre assez pour écrire la commande suivante qui hachera la chaîne "password"
:
$ python -c 'import bcrypt; print(bcrypt.hashpw("password", bcrypt.gensalt(log_rounds=10)))'
$2a$10$vWFRZgbOx6RKOKYxCTtyWuMJM60E90Vdm/.0nj.X/o3dYUxvQ/2Dm
Pour les versions ultérieures de bcrypt
utilisez rounds=
au lieu de log_rounds=
.
Complémentaire à @Disassembler
réponse:
ps
)15
est un bon équilibre entre complexité et vitesse de génération de mot de passeScript de wrapper pour 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 $?