如何制作批量(或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密钥对(用于私人通信),但我希望密钥的短ID易于记忆,例如FFFFFFFE
。
PGP密钥的短ID是其指纹的最后8个字符。为了您的信息,PGP密钥的指纹是校验和(历史上,SHA-1)。
我对生成的PGP密钥的要求如下:
--expert
模式。
好。所以,我想我获得“自定义”密钥ID的解决方案是生成 lot (请注意,如果你这样做,我相信全局熵会变得非常小),并选择我喜欢的那个最多(例如,当您的电话提供商允许您在列表中选择未来的电话号码时)。
通过阅读that page in the doc,我想我可以使用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
)“允许的值是'加密','签名'和'auth'”。 cert
是默认设置,但使用空白Key-Usage
字段也不起作用。
我认为使用我想要的设置生成所有这些键的唯一方法是,没有解决方案,但模拟密钥生成就好像一个真实的人正在以交互方式运行GPG的shell。
以下是必须完成的内容的摘录:
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: […]
[…]
所以,呃。 非常感谢你。 奇怪的要求,我知道。 咯咯笑
答案 0 :(得分:0)
好吧,我找不到我想要的解决方案(我可以在背景中运行,而不是马车等等) - 而且我仍然愿意为了个人文化而提供更好的解决方案和答案。< / p>
无论如何,这是我提出的AutoHotkey脚本。 非常脏。我编码了一下,然后放弃并使用 AutoScriptWriter 工具录制宏,并根据我的需要调整代码(哈哈)。最烦人的事情是学习如何与GPG-Agent(pinentry)进行交互。
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}
}
这个小脚本让我得到了一大堆钥匙,其中一个钥匙我喜欢的短身份。