我正在尝试创建一个Elixir代码,它将生成GnuPG兼容的密钥对,并且能够加密、解密和签名消息。但它还可以导出PEM格式的密钥和消息,这一点也很重要,这样用户就可以在GnuPG实现中使用它。
我是这样开始尝试的:
defmodule GPG do
def test do
private_key = generate_private_key()
public_pem = pem_encoded_public_key(private_key)
IO.puts("Public Key PEM:")
IO.puts(public_pem)
end
defp pem_encoded_public_key(private_key) do
private_key
|> public_key_from_private_key()
|> pem_entry_encode(:RSAPublicKey)
end
defp generate_private_key do
:public_key.generate_key({:rsa, 2048, 65537})
end
defp public_key_from_private_key(private_key) do
{:RSAPublicKey, elem(private_key, 2), elem(private_key, 2)}
end
defp pem_entry_encode(key, type) do
:public_key.pem_encode([:public_key.pem_entry_encode(type, key)])
end
end
如果我在iEx上运行GNU.test(),它将输出:
iex(3)> GPG.test()
Public Key PEM:
-----BEGIN RSA PUBLIC KEY-----
MIICCgKCAQEAxEKcdLQmc8ik+srOf/hVTUzADGOVOrtOAigyqCMmtxAmNW4fTj5+
3MTSBTHQLSO0gWeuq2gR2Qrb/vd0d3OOielAudonvgo3enDL2jDp49zokB333LgK
64QK+l1erkjmy1Atj2fbXJAE0O2VzZmfMjCUGBJJQ/cklWXZH0Qczjojith2VHJU
jx4OoGHzIOOJ9qDOPPrY43vvymWs4CEM7OPUKq37MDfU0yxtSGoBERW2a/4jUOlk
JNQSBzjUSfd7VZaIziyF8NRy47j1ErrES3DS8m5zPoR/d+qyrQs0pg1S7Wgr9Aws
tpwM6yFEKhK507S4gdBuVWqyIVuiI/HcmwKCAQEAxEKcdLQmc8ik+srOf/hVTUzA
DGOVOrtOAigyqCMmtxAmNW4fTj5+3MTSBTHQLSO0gWeuq2gR2Qrb/vd0d3OOielA
udonvgo3enDL2jDp49zokB333LgK64QK+l1erkjmy1Atj2fbXJAE0O2VzZmfMjCU
GBJJQ/cklWXZH0Qczjojith2VHJUjx4OoGHzIOOJ9qDOPPrY43vvymWs4CEM7OPU
Kq37MDfU0yxtSGoBERW2a/4jUOlkJNQSBzjUSfd7VZaIziyF8NRy47j1ErrES3DS
8m5zPoR/d+qyrQs0pg1S7Wgr9AwstpwM6yFEKhK507S4gdBuVWqyIVuiI/Hcmw==
-----END RSA PUBLIC KEY-----
但是如果我创建一个test_public_key.txt文件,将这个给定的密钥作为内容,并运行GnuPG来评估它,就会发生这种情况:
$ gpg --show-keys test_public_key.txt
gpg: no valid OpenPGP data found.
我在想我错过了什么。
1条答案
按热度按时间3okqufwl1#
我相信gpg期望这种格式
只需手动更改标题并添加一个空行。