[英]How to extract the original data from a non detached binary gnupg signature with python?
我如何从未分离的二进制签名中获取原始数据 ?
import gnupg
gpg = gnupg.GPG(gnupghome='/tmp/testGPG')
params = {
'Key-Type': 'DSA',
'Key-Length': 1024,
'Name-Real' : 'Real Name',
'Expire-Date': 0,
}
cmd = gpg.gen_key_input(**params)
gpg.gen_key(cmd)
data = str.encode('To be signed')
sig = gpg.sign(data, detach=False, binary=True)
res = gpg.verify(sig.data)
print(res.data)
我希望res.data
等于orig_data
但这只是b''
最简单的方法是“解密”该数据。 我只是在我的ipython shell中尝试过:
In [18]: gpg.import_keys(private_key).count
Out[18]: 1
In [19]: signature = gpg.sign("Some data to sign")
In [20]: gpg.decrypt(signature.data).data
Out[20]: b'Some data to sign\n'
请注意,您提供的代码段对我不起作用。 GPG抱怨无法生成密钥:
[GNUPG:] PINENTRY_LAUNCHED 9678 curses:curses 1.0.0 ? ? ?
gpg: DBG: chan_3 -> END
gpg: DBG: chan_3 <- ERR 83918950 Inappropriate ioctl for device <Pinentry>
gpg: agent_genkey failed: Inappropriate ioctl for device
gpg: key generation failed: Inappropriate ioctl for device
这不会使您的代码失败并产生空签名!
也许这是我的本地问题。 但是在开始对数据进行签名/验证之前,请务必确保成功完成了密钥生成/密钥导入过程! 否则,您可能会变得怪异或暴露敏感信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.