首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在键上使用gpg --list-packets的输出来获取MPI值以生成s表达式

在键上使用gpg --list-packets的输出来获取MPI值以生成s表达式
EN

Stack Overflow用户
提问于 2011-06-01 08:13:21
回答 3查看 1.7K关注 0票数 4

我正在尝试使用gpg生成的公钥来使用libgcrypt进行加密。我在密钥上使用list packets命令来获取密钥的内容,并将MPI值解析为s表达式。因此,当我尝试用我的公钥编码我的会话密钥时,我得到了错误"Odd hexadecimal in S-expression"?我认为list packets可能给了我没有前导零的十六进制数字?如果是这样的话,我需要做什么才能获得可以在libgcrypt中使用的MPI值呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-17 11:46:39

经过反复试验以及来自gpg和libgcrypt邮件列表的建议,list packets命令确实会截断MPI值中的前导零,因此在以下情况下,您必须在MPI值前加上零:

  • 十六进制字符串的长度是奇数(前置为1)或
  • mpi为负值(前置为2个0)。

作为进一步说明,使用列表数据包来获取MPI值是不明智的,因为它不能可靠地获取MPI值,因为它应该是一个可能会发生变化的调试命令。我发现获取公钥和私钥的MPI值的最佳方法是直接解析密钥的二进制导出,方法是使用带RFC4880的export key命令进行解码。

票数 1
EN

Stack Overflow用户

发布于 2013-03-28 18:55:17

您可以使用此命令导出密钥:

代码语言:javascript
复制
gpg2 --homedir . --export-options export-sexp-format --export-secret-key $KEYID

并使用此命令导出公钥:

代码语言:javascript
复制
gpg --homedir . --export | openpgp2ssh $KEYID | ssh-conv | sexp-conv --syntax=hex

您可能需要以下工具包:

代码语言:javascript
复制
sudo apt-get install monkeysphere lsh-utils nettle-bin
票数 0
EN

Stack Overflow用户

发布于 2015-01-12 06:52:23

通过使用pgpdump,我能够获得所需的所有MPI值。一定要使用-i,它会告诉它打印所有整数值。唯一奇怪的是,Attilla发布的公钥命令在开头有两个零,而pgpdump输出没有。我不确定是否还需要它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6194941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档