我通过 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
。