Komut satırından bcrypt hash değerini hesaplama


20

Parolamın bcrypt karmasını hesaplamak istiyorum.

Bunu yapacak bir açık kaynak komut satırı aracı var mı?

Eşitleme yapılandırma dosyasındaki bu karmayı kullanırım ( buradan gui bölümündeki kullanıcı ve parolayı kaldırmak için yapılandırma dosyasını düzenleyerek parolayı sıfırlayabildiğimi bilmemize rağmen Eşitlemeyi yeniden başlat).

Yanıtlar:


28

Şunları yapabilirsiniz (ab) kullanımı htpasswdgelen apache-utils paketinde, sürüm 2.4 veya daha yüksek olması koşuluyla.

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

-bikinci komuttan parolayı alır,
-nbir dosyaya yazmak yerine hash'ı stdout'a yazdırır
-Bbcrypt kullanma talimatı
-C 10bcrypt maliyetini 10'a ayarlar

Bare htpasswd komutu <name>: <hash> biçiminde ve ardından iki yeni satır olarak çıkar. Bu nedenle, ad ve trkolon ve satırsonu sıyırma için boş dize .

Komut $2y$, bcrypt'i önekle çıkarır , bu da bazı kullanımlar için sorun olabilir, ancak sedOpenBSD varyantını kullanarak $2a$sabit crypt_blowfish varyantı ile uyumlu olduğu için başka biri tarafından kolayca sabitlenebilir $2y$.

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

Htpasswd man sayfasına bağlantı: https://httpd.apache.org/docs/2.4/programs/htpasswd.html
Bcrypt varyantları hakkında ayrıntılar: /programming//a/36225192/6732096


Bu sürümün Java Spring Security'nin BCrypt uygulamasıyla ilgili bir sorunu var. Karma şifresi boş karakterle sonlandırılmalıdır. Spring Security bunu doğru yapıyor gibi görünüyor. Bence htpasswd bunu doğru yapmıyor.
k_o_

@k_o_: "Sorun var" konusunda daha açık olabilir misiniz? Tüm bcrypt uygulamaları boş karakter sonlandırıcıyı kullanır. Py-bcrypt gibi bazılarında boş karakterin parolanın bir parçası olmadığından emin olmak için ek denetimler bile vardır. Apache uygulamasını GitHub'da kontrol edebilirsiniz . Birden fazla Bahar uygulamaları için veritabanı kayıtlarını sorunsuz olarak doldurmak için ek sed ile htpasswd kullanıyorum (aslında cevaba nasıl gelirim).
Disassembler

Null karakterini bırakmanın, Bahar ve htpasswd arasındaki farklı kodlamaları açıklamak için bir htpasswd sorunu olduğunu varsayıyordum. Diğer cevabın Python yaklaşımını kullanarak bcrypt'ten elde edilen çıktı, Spring'deki ile aynı sonuçları üretiyordu, ancak htpasswd değildi. Belki de benim htpasswd sürümü oldukça eski, bence ikili 2 yıldan beri güncellenmedi.
k_o_

11

Bir Python kütüphanesi kullanabilirsiniz. Fedora sistemimde şunları yaptım:

sudo dnf search bcrypt

(sudo sadece bir kullanıcı dnf önbelleği için alan israfını önlemek içindir) ve sonuçta bir Python2 ve Python3 paketi olduğunu görebilirsiniz:

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

Python2 sürümünü yükleyin ve paketteki dosyaları listeleyin:

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

Bu bir dosya olduğunu gösterir, /usr/lib64/python2.7/site-packages/bcrypt/__init__.pyböylece belgeleri alabilirim

pydoc bcrypt

Bu bana dizeyi hash edecek aşağıdaki komutu yazacak kadar gösterir "password":

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

Bunun yerine daha sonraki bcryptkullanım sürümleri rounds=için log_rounds=.


2
+1. FTR sudoçalıştırmanıza gerek yok dnf search, standart kullanıcı olarak iyi çalışıyor.
Stephen Kitt

1
Nisan 2018 tarihi itibariyle parametre log_roundsiçin değişmiş gibi görünüyor roundsyapma python -c 'import bcrypt; print(bcrypt.hashpw("password", bcrypt.gensalt(rounds=10)))'.
HorstKevin

4

Cevabına ek olarak @Disassembler:

  • şifreleri komut satırından aktarmak iyi bir fikir değildir (şifre ile görüntülenebilir ps)
  • 15 karmaşıklık / şifre oluşturma hızı için iyi bir dengedir

htpasswd& İçin sarmalayıcı komut dosyası 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 $?

2
Komut satırını boşlukla başlatmazsanız, parola kabuk geçmişinize (muhtemelen şifrelenmemiş bir dosya) gider.
Gabriel Devillers

@ GabrielDevillers evet, burada da aynı. OPTS'ye "-i" ve 2.-son satırına "" ekledim.
towi

BASH ve mySQL geçmişi için rootkullanıcı için sembolik bir bağlantı oluşturmak iyi bir fikirdir /dev/null.
Stuart Cardall

1
@ GabrielDevillers'ın yorumuyla ilgili olarak, belki de başlangıçta bir boşluk eklemenin her zaman bir öğeyi kabuk geçmişinden gizlemediğinden bahsetmeye değer - kabuk ve ayarlara bağlıdır.
tremby
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.