如何解决使用gpg --list-packets的输出在键上获取mpi值以生成s表达式
| 我正在尝试使用gpg生成的公共密钥来使用libgcrypt进行加密。我在密钥上使用了list packet命令来获取密钥的内容,并将mpi值解析为s表达式。因此,当我尝试使用公共密钥对会话密钥进行编码时,会收到错误“ S表达式中的奇数十六进制数”?我认为列表数据包可能给了我十六进制数字而没有前导零?如果是这样,我需要做些什么来获取可在libgcrypt中使用的mpi值?解决方法
经过gpg和libgcrypt邮件列表的反复试验和建议之后,list packet命令的确从mpi值截断了前导零,因此,在以下情况下,您将必须在mpi值前加上零:
十六进制字符串的长度为奇数(以零开头)或
mpi为负值(前面有两个零)。
进一步说明,使用列表数据包获取mpi值是不明智的,因为它不能可靠地获取您的mpi值,因为它应该是可能会更改的调试命令。我发现获得公钥和私钥的mpi值的最佳方法是通过使用带有RFC4880的export key命令对其进行解码来直接解析密钥的二进制导出。
, 您可以使用它导出密钥:
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
, 通过使用pgpdump,我可以获得所需的所有mpi值。确保使用-i
告诉它打印所有整数值。唯一奇怪的是Attilla发布的公钥命令在pgpdump输出没有的开始就具有两个零。我不确定是否需要它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。