我正在尝试使用gpg生成的公钥来使用libgcrypt进行加密。我在密钥上使用list packets命令来获取密钥的内容,并将MPI值解析为s表达式。因此,当我尝试用我的公钥编码我的会话密钥时,我得到了错误"Odd hexadecimal in S-expression"?我认为list packets可能给了我没有前导零的十六进制数字?如果是这样的话,我需要做什么才能获得可以在libgcrypt中使用的MPI值呢?
发布于 2011-06-17 11:46:39
经过反复试验以及来自gpg和libgcrypt邮件列表的建议,list packets命令确实会截断MPI值中的前导零,因此在以下情况下,您必须在MPI值前加上零:
作为进一步说明,使用列表数据包来获取MPI值是不明智的,因为它不能可靠地获取MPI值,因为它应该是一个可能会发生变化的调试命令。我发现获取公钥和私钥的MPI值的最佳方法是直接解析密钥的二进制导出,方法是使用带RFC4880的export key命令进行解码。
发布于 2013-03-28 18:55:17
您可以使用此命令导出密钥:
gpg2 --homedir . --export-options export-sexp-format --export-secret-key $KEYID并使用此命令导出公钥:
gpg --homedir . --export | openpgp2ssh $KEYID | ssh-conv | sexp-conv --syntax=hex您可能需要以下工具包:
sudo apt-get install monkeysphere lsh-utils nettle-bin发布于 2015-01-12 06:52:23
通过使用pgpdump,我能够获得所需的所有MPI值。一定要使用-i,它会告诉它打印所有整数值。唯一奇怪的是,Attilla发布的公钥命令在开头有两个零,而pgpdump输出没有。我不确定是否还需要它们。
https://stackoverflow.com/questions/6194941
复制相似问题