Nie ma wbudowanej metody, aby to zrobić, ale wystarczy utworzyć test, który niczego nie modyfikuje i pozwala po prostu sprawdzić hasło.
Nie określiłeś, więc zakładam, że używasz wersji GnuPG mniejszej niż v2 i używasz Linuksa z Bash jako interpreter wiersza poleceń.
Podam polecenie tutaj, a poniżej wyjaśnię, co robi każda część - (uwaga: poniższe dotyczy wersji 1 serii GnuPG, poniżej wersja 2 serii GnuPG)
echo "1234" | gpg --no-use-agent -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"
Po pierwsze, potokuj jakiś tekst do podpisania do GnuPG echo "1234" |
- ponieważ tak naprawdę nie chcemy niczego podpisywać, to tylko test, więc podpiszemy jakiś bezużyteczny tekst.
Następnie mówimy gpg, aby nie używał agenta kluczowego z --no-use-agent
; jest to ważne później, ponieważ w zależności od Twojego głównego agenta, po pomyślnym zakończeniu może nie zwracać „0”, a to wszystko, co chcemy zrobić - zweryfikować powodzenie hasła.
Następnie mówimy gpg, aby umieścił podpisane dane bezpośrednio w /dev/null
pliku, co oznacza, że odrzucamy je i nie zapisujemy wyniku na terminalu - UWAGA: jeśli nie używasz jakiegoś wariantu Linux / Unix, ten plik może nie istnieć. W systemie Windows może być konieczne zezwolenie na zapisanie podpisanych danych na ekranie, po prostu pomijając rozszerzenie-o /dev/null
część.
Następnie określamy klucz, z którym chcemy wykonać nasz test, używając --local-user 012345
. Możesz użyć KeyID w celu uzyskania maksymalnej precyzji lub użyć nazwy użytkownika, w zależności od tego, która najlepiej odpowiada Twoim potrzebom.
Następnie określamy -as
, co włącza tryb wyjścia ascii i ustawia tryb kontekstu dla podpisywania. Następnie -
po prostu mówi GnuPG, aby pobierał dane do podpisania ze standardowego wejścia, co jest pierwszą częścią polecenia, które wydaliśmy echo "1234" |
.
I na koniec mamy && echo "A message that indicates success"
- „&&” oznacza, że jeśli poprzednie polecenie się powiodło, wydrukuj tę wiadomość. Zostało to dodane tylko dla przejrzystości, ponieważ w przeciwnym razie powodzenie powyższego polecenia byłoby sygnalizowane brakiem danych wyjściowych.
Mam nadzieję, że jest to wystarczająco jasne, abyś zrozumiał, co się dzieje i jak możesz go wykorzystać, wykonując testy, które chcesz przeprowadzić. Jeśli jakakolwiek część jest niejasna lub nie rozumiesz, z przyjemnością wyjaśnię. Powodzenia!
[EDYTUJ] - Jeśli używasz GnuPG v2, powyższe polecenie będzie wymagało niewielkiej modyfikacji, na przykład:
echo "1234" | gpg2 --batch --passphrase-fd 1 -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"
Powodem jest to, że GnuPG v2 oczekuje, że hasło zostanie pobrane przez agenta, więc nie możemy wyłączyć używania agenta z --no-use-agent
pożądanym skutkiem; zamiast tego musimy powiedzieć GnuPG v2, że chcemy uruchomić proces „wsadowy” i pobrać hasło ze STDIN (standard in) przy użyciu opcji --passphrase-fd 1
.
gpg --local-user <KEYID> -as
. To po prostu pozwala agentowi poprosić o hasło i powie Ci, czy było poprawne (wtedy nic nie robi).