尝试使用 RSA 公钥加密纯文本会引发错误“无法加载公钥”

尝试使用 RSA 公钥加密纯文本会引发错误“无法加载公钥”

我通过 pem 文件从同事那里收到了一个 RSA 公钥:

-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAwGbtPQW6k1S1N8GM4UDxwexV4M+5BHcjs/l397/Mjt/J9+yL4PMw
cdLTnO/PHwCne3DdWsxHoZA/MIHRF+K/d2yDJ8DWHIKtbbUx6/1NOoogauwx+Ush
hNsaT3BCCw+ruFiyPCNKE6JN98hdbiP/61Y9OPZw/9m3c0mMtDv0gtjLJ2Q1z308
DGDZOA3+fTo/PEAgoCycVl0WwwN+AFYsj4DRqIlnxbd0PTSqxVBV+T1oaNmN/8jl
E0zOyQNzOHhDFhJJMucodrUOIFmpWSX6Ff2sVaXY81z4oRq3KrVOK4LZkP6cpPdh
s4Qa6ztWuwJ1ZKK6jOZxF0U2015/4njvgQIDAQAB
-----END RSA PUBLIC KEY-----

但当我尝试在 Mac 上用它加密一些简单的文本时

openssl rsautl -encrypt -pubin -inkey "/path/to/file/public.pem" -ssl -in "Some text to encrypt with public key" -out /path/to/EncryptedMessage.txt

OpenSSL 抛出异常

unable to load Public Key

此外,密钥验证

openssl rsa -text -pubin < "/path/to/file/public.pem"

也会引发异常

unable to load Public Key
3106:error:0906D06C:PEM routines:PEM_read_bio:no start line:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.7/src/crypto/pem/pem_lib.c:648:Expecting: PUBLIC KEY

公钥是在 Mac 上生成的,并转换为 pem

ssh-keygen -f ~/.ssh/id_rsa.pub -m 'PEM' -e > public.pem

错误消息表明公钥格式无效。那么我不明白什么,如何解决错误?

编辑

hexdump -C -n64 public.pem
00000000  2d 2d 2d 2d 2d 42 45 47  49 4e 20 52 53 41 20 50  |-----BEGIN RSA P|
00000010  55 42 4c 49 43 20 4b 45  59 2d 2d 2d 2d 2d 0a 4d  |UBLIC KEY-----.M|
00000020  49 49 42 43 67 4b 43 41  51 45 41 77 47 62 74 50  |IIBCgKCAQEAwGbtP|
00000030  51 57 36 6b 31 53 31 4e  38 47 4d 34 55 44 78 77  |QW6k1S1N8GM4UDxw|
00000040

看起来是没有 BOM 的 ASCII。

答案1

-----BEGIN RSA PUBLIC KEY-----头显示这是一个 PKCS#1 文件。OpenSSL 需要以 开头的 PKCS#8 文件-----BEGIN PUBLIC KEY-----(请注意,没有RSA)。

您需要使用该-RSAPublicKey_in选项将openssl rsa文件从 PKCS#1 转换为 PKCS#8 文件:

openssl rsa -RSAPublicKey_in -pubin -in /path/to/file/public.pem -out /path/to/file/pkcs8.pem

完成后,您可以使用转换后的文件执行第一个命令。

经过谷歌搜索,我们发现 Mac 上的 OpenSSL 版本可能没有该-RSAPublicKey_in选项,在这种情况下,您可能需要通过 安装较新版本brew upgrade openssl

相关内容