尝试加密文本时出现“无法加载公钥”

尝试加密文本时出现“无法加载公钥”

我的目的是使用 PEM 格式的公钥加密文本。(来源)

> echo "encrypt this." | openssl rsautl -encrypt -pubin -inkey pub.pem
unable to load Public Key

如果我将文本放入名为 txt 的文件中并运行,也会发生同样的情况:

> openssl rsautl -encrypt -pubin -inkey pub.pem -ssl -in txt -out txt.enc
unable to load Public Key

(这是在类似问题的答案中提出的:如何使用ssh-rsa公钥加密文本?

为什么 OpenSSL 无法加载公钥?


公共.pem:(来源)

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 6.5.8 for non-commercial use <http://www.pgp.com>
mQGiBDp1yy0RBADVlyDewVwltBs7HnHCG3bXlVUODFkn/00TdbM2SPnOAIkj4giB
ylOP7Mg+Hr5y7FIBvmPWx06In6JjNQiSbpshP5YHv57UfE79nEJdWuSTQt/7j7IJ
GkHYtBRHQMIAHMgT8IB5d3gFq52jSa8hw/ixMP09a0Rw8RP9+kOE4s9UrQCg/zVH
IHswdc/mb50PjdeXwnjxQbkD/3lJYEzz8eUlFHB4rVaC1yRi21Lypf0DIMfQg5j9
xBxY4odFJKyf22PeuAjp9roURRIbGIkIGH8eXF+Mav9OqEdD80JbEn1hZuaLk1RF
k1XJjmFRdKXz+Q7JmRdbs3zXXav2cYwalgzEXT5kuXuNlThLTnLoEFop8Hl3xM4/
PdqMBACkkHb07vPY5l429tdXqL00lE6LedlBW4FLjI534QgselsrUxq5U5y0Wg1Z
//a66l5QkyaMrpsHKfkLHdaPOVCs/WeG6eLwD/cUBEM1Y9Yb5DaB0njdZB3Yxcm8
W23hpKjDanb7SbaSA16gBIWRlvrB/qU+MZAj+EXRDJmwMJq2y7QjbmV0aXZhIGNh
ZnRvcmkgPG5ldGl2YWNAb25lYm94LmNvbT6JAE4EEBECAA4FAjp1yy0ECwMCAQIZ
AQAKCRDFpFclYzXzSwiRAJ0S3djCkJJPUalRyE+vWnfnhvJmDgCfTEBN2N6GlGWO
mrOg1tQlZoWbd5q5Ag0EOnXLLRAIAPZCV7cIfwgXcqK61qlC8wXo+VMROU+28W65
Szgg2gGnVqMU6Y9AVfPQB8bLQ6mUrfdMZIZJ+AyDvWXpF9Sh01D49Vlf3HZSTz09
jdvOmeFXklnN/biudE/F/Ha8g8VHMGHOfMlm/xX5u/2RXscBqtNbno2gpXI61Brw
v0YAWCvl9Ij9WE5J280gtJ3kkQc2azNsOA1FHQ98iLMcfFstjvbzySPAQ/ClWxiN
jrtVjLhdONM0/XwXV0OjHRhs3jMhLLUq/zzhsSlAGBGNfISnCnLWhsQDGcgHKXrK
lQzZlp+r0ApQmwJG0wg9ZqRdQZ+cfL2JSyIZJrqrol7DVekyCzsAAgIH+wVFKD3A
FEdEBHqDZuKjLdLJIKHk4gloKeQ60R9NLLFynfIgSvgsii5uWLY9+gZ2FIGnP3Yc
GxZH1HASv+pG1sw0MnhutxZui3E3Mt69Uv1KTlTGYkfS+mXBw4Qr7hXavCkF45we
f/9Qlj6hSKVjy4YcewdvpopM9S4gVcBq+EdTp1negsCyj3YhFiEo0JEL40mnoHX7
HudJBbiBmknmBZOjxzBBeDPcu7fWV/LDCWiFoGg9uWy2KOcIt7sNXVJbukbSGYg2
hzOB2JPaqCqI5+4YfUCumNLd0lktT7S1V3/6xszEnybQL7tMtmrZZFAFHFAwLNPA
bLxdF/b26GbrTT+JAEYEGBECAAYFAjp1yy0ACgkQxaRXJWM180ttbQCg98c40J41
iXkP9CuqGR0LBJ46VNAAnj+5dH9N226fBp5TN0rAyxwBveTK
=0VvA
-----END PGP PUBLIC KEY BLOCK-----

(Ubuntu 14.04.3 LTS)

> openssl version
OpenSSL 1.0.1f 6 Jan 2014

答案1

那是不是“PEM 格式的公钥”。虽然外层保护类似于 PEM,但您实际上拥有的是 PGP 密钥块(用途类似于 SSL X.509 证书),而不是裸露的 RSA 密钥。

(注意第一行表示它是“PGP 公钥”。预期的标头将是BEGIN PUBLIC KEYPKCS#7 或BEGIN RSA PUBLIC KEYPEM / PKCS#1。)

事实上,PGP 密钥块甚至没有 RSA 密钥——这个特定的密钥块包含 DSA 和 ElGamal 密钥。(DSA 用于制作数字签名;埃尔加马尔是基于DH的加密系统。

从技术上来说,可以从密钥块中提取原始密钥对,但这并不合理这里 – 如果收件人使用 PGP 并希望通过 PGP 解密消息,那么您也应该使用 PGP 加密它们。(此外,该openssl工具甚至不支持与 ElGamal 一起使用。)

$ gpg < pub.txt
gpg:装甲标头:版本:PGPfreeware 6.5.8 用于非商业用途<http://www.pgp.com>
酒吧  dsa1024/C5A457256335F34B 2001-01-29
尿道喷液
签名 C5A457256335F34B 2001-01-29 [自签名]elg2048/9AF9DF1397F431A1 2001-01-29
sig C5A457256335F34B 2001-01-29 [按键绑定]

使用此文件的正确方法是将其导入 PGP、GnuPG 或兼容工具:

$ gpg --import < pub.txt
$ echo "encrypt this" | gpg --armor --recipient C5A457256335F34B --encrypt

(但请注意,密钥略有损坏——必须有一个空行在“Version:”行之后。您必须在尝试导入密钥块之前手动添加它。

相关内容