Как симулировать нажатие клавиш в скрипте? [Генерация ключа эксперта GPG]
Как мне сделать Batch (или C/C++) скрипт (запустить gpg
команда сотни раз), которая способна симулировать следующий ввод с клавиатуры (и достаточно умна, чтобы ждать ввода)?
8
↵S
↵E
↵Q
↵4096
↵0
↵y
↵Jean Dupont
↵
↵born 1970-01-01 in Paris, France
↵O
↵correct horse battery staple
↵correct horse battery staple
↵
Я хотел бы сгенерировать себе пару ключей PGP (для личного общения), но я бы хотел, чтобы короткий идентификатор ключа был легко запоминающимся, например FFFFFFFE
например.
Короткий идентификатор ключа PGP - это последние 8 символов его отпечатка. Для вашей информации, отпечаток ключа PGP является контрольной суммой (исторически SHA-1).
Мои пожелания для сгенерированного ключа PGP следующие:
- Его короткий идентификатор (см. Выше) должен быть легко запоминающимся.
- Я хочу, чтобы мой ключ был "необычным", поэтому я должен использовать
--expert
Режим.- По умолчанию сгенерированный ключ может шифровать (E) и подписывать ключи других людей (C, "cert"), но я хочу, чтобы мои подписывали только ключи других людей.
Хорошо. Итак, я думаю, что мое решение для получения "пользовательского" идентификатора ключа состоит в том, чтобы генерировать их много (будьте осторожны, я полагаю, что глобальная энтропия сильно уменьшится, если вы сделаете это), и выберите тот, который мне больше всего нравится (например, когда ваш телефонный провайдер позволяет выбрать свой будущий номер телефона в списке).
Что я пробовал
Читая эту страницу в документе, я подумал, что смогу использовать gpg --batch --expert --gen-key gpg-keygen-settings.txt
со следующим файлом настроек:
Key-Type: RSA
Key-Length: 4096
Key-Usage: cert
Name-Real: Jean Dupont
Name-Comment: born 1970-01-01 in Paris, France
Expire-Date: 0
Passphrase: correct horse battery staple
%commit
%echo Done.
НО это не позволит мне создать ключ, который используется только для подписи ключей других людей (cert
). Действительно, в документации сказано (для Key-Usage
) что " Допустимые значения:" encrypt "," sign "и" auth " ". cert
по умолчанию, но с использованием пробела Key-Usage
поле тоже не работает.
То, что я считаю, я должен сделать
Я думаю, что единственный способ для меня сгенерировать все эти ключи с нужными мне настройками - это не решение, а симуляция генерации ключей, как если бы реальный человек интерактивно запускал оболочку GPG.
Вот выдержка из того, что должно быть сделано:
C:\> gpg --gen-key --expert
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(7) DSA (set your own capabilities)
(8) RSA (set your own capabilities)
Your selection? 8
Possible actions for a RSA key: Sign Certify Encrypt Authenticate
Current allowed actions: Sign Certify Encrypt
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection?
[…]
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Requested keysize is 4096 bits
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
Real name: […]
[…]
Так что Большое спасибо. Странная просьба, я знаю. Chuckles
1 ответ
Ну, я не нашел решения, которое искал (что-то, что я мог бы сделать в фоновом режиме, не глючить и т. Д.) - и я все еще открыт для моей личной культуры, к лучшим решениям и ответам.
Во всяком случае, вот сценарий AutoHotkey, который я придумал. Очень грязно Я немного кодировал, затем сдался и использовал инструмент AutoScriptWriter для записи макроса, и адаптировал код под свои нужды (ха-ха). Самое неприятное было узнать, как взаимодействовать с GPG-Agent (пинентри).
Loop 100
{
Run, cmd.exe /k "gpg --expert --gen-key"
WinWait, C:\Windows\SYSTEM32\cmd.exe - gpg --expert --gen-key,
IfWinNotActive, C:\Windows\SYSTEM32\cmd.exe - gpg --expert --gen-key, , WinActivate, C:\Windows\SYSTEM32\cmd.exe - gpg --expert --gen-key,
WinWaitActive, C:\Windows\SYSTEM32\cmd.exe - gpg --expert --gen-key,
Sleep 1500
Send +8{Enter}
Send S{Enter}C{Enter}Q{Enter}
Send +4+0+9+6{Enter}
Send +0{Enter}o{Enter}
Send Jean Dupont{Enter}
Send {Enter}
Send born {Shift Down}1970{Shift Up}6{Shift Down}01{Shift Up}6{Shift Down}01{Shift Up} in Paris, France{Enter}O{Enter}
; The "6" keypress above is to make a - on French AZERTY keyboards.
WinWait, pinentry,
IfWinNotActive, pinentry, , WinActivate, pinentry,
WinWaitActive, pinentry,
Send, correct horse battery staple{ENTER}
Sleep 1500
Send, correct horse battery staple{ENTER}
Sleep 10000
;Send exit{Enter}
}
Этот небольшой скрипт позволил мне получить набор ключей, один из которых с коротким идентификатором, который мне нравится.