如何使用python从非分离的二进制gnupg签名中提取原始数据?

时间:2014-08-09 14:04:53

标签: python gnupg

如何从未分离的二进制签名中获取原始数据

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''

1 个答案:

答案 0 :(得分:1)

最简单的方法是“解密”该数据。我只是在我的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

不会使您的代码失败并产生空签名!

也许这是我的本地问题。但在开始签名/验证数据之前,请务必确保密钥生成/密钥导入过程成功!否则,您可能会遇到奇怪的状态或暴露敏感信息。