OpenSSL 无法加载 Public 密钥
OpenSSL unable to load Public Key
尝试在 OSX Yosomite 10.10.2
上通过命令行加密短信
创建了 public .pem
密钥,如下所示:
ssh-keygen -f ~/.ssh/id_rsa.pub -e -t PKCS8 > id_rsa.pem
如果我尝试加密 myMessage.txt
openssl rsautl -encrypt -inkey ~/.ssh/id_rsa.pem -pubin -in ~/Desktop/myMessage.txt -out ~/Desktop/encrypted.txt
我得到unable to load Public key
如果我再输入:
openssl asn1parse -in id_rsa.pem
Returns: Error: offset too large
但我不知道如何修复它。
我应该更改什么才能使其正常工作?
仍然不知道我的问题出了什么问题,但找到了解决方案:
1) 生成 RSA 密钥:
$ openssl genrsa -out key.pem 1024
$ openssl rsa -in key.pem -text -noout
2) 在 pub.pem 文件中保存 public 键:
$ openssl rsa -in key.pem -pubout -out pub.pem
$ openssl rsa -in pub.pem -pubin -text -noout
3) 加密一些数据:
$ echo test test test > file.txt
$ openssl rsautl -encrypt -inkey pub.pem -pubin -in file.txt -out file.bin
4) 解密加密数据:
$ openssl rsautl -decrypt -inkey key.pem -in file.bin
它就像一个魅力
感谢 Marek Marcola 提供的信息http://openssl.6102.n7.nabble.com/Re-Can-I-use-my-own-keys-with-openssl-for-RSA-enc-dec-td12506.html
我也遇到过这个问题,觉得这里有一个很好的提示:
How can I transform between the two styles of public key format, one "BEGIN RSA PUBLIC KEY", the other is "BEGIN PUBLIC KEY"
OpenSSL 加密命令似乎需要 SSL public 密钥而不是 RSA public 密钥。
我们现在知道的足够多,可以调整示例以使其工作。
可以使用
从 RSA public 密钥生成 SSL public 密钥
openssl rsa -in id_rsa.pem -RSAPublicKey_in -pubout > id_pub.pem
然后可以使用
进行加密步骤
openssl rsautl -encrypt -inkey id_pub.pem -pubin -in ~/Desktop/myMessage.txt -out ~/Desktop/encrypted.txt
在撰写本文时,MacOSX Yosemite 中的默认 OpenSSL 命令似乎是 0.9.8zg。此版本中的 rsa 命令不支持 运行 上面第一个命令的功能。我通过安装 OpenSSL 1.0.1p 解决了这个问题。
我在从证书中提取 public 密钥时遇到了同样的问题。
openssl x509 -pubkey -noout -in cert.crt > pubKey.pem
后来,我想用下面的命令打印有关密钥的信息。
openssl rsa -text -pubin -in pubKey.pem
并出现错误:unable to load Public Key
解决方案
我在记事本++中打开pubKey.pem,在编码菜单中选择了UCS-2 LE BOM。所以我改成了UTF-8编码。 pubKey.pem 的大小在更改编码后是原来的一半。然后它就像魅力一样。
在 Windows 和 powershell
中测试
您的初始解决方案应该有效,您只是有一个小错字:要指定密钥格式 (PKCS8),使用“-m”选项而不是“-t”选项(它代表密钥类型:dsa, ecdsa、ed25519 或 rsa)。请参阅 ssh-keygen 手册页。
ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8 > id_rsa.pem
然后,你可以用这个加密:
openssl rsautl -encrypt -inkey ~/.ssh/id_rsa.pem -pubin -in ~/Desktop/myMessage.txt -out ~/Desktop/encrypted.txt
而且,您可以使用以下方式解密:
openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in ~/Desktop/encrypted.txt -out ~/Desktop/decrypted.txt
您可以使用文本编辑器或此 diff 命令检查原始文件和解密文件之间的差异:
diff ~/Desktop/myMessage.txt ~/Desktop/decrypted.txt
事实上,openssl rsautl -encrypt 命令需要一个 public 密钥和 "PEM PKCS8 public key" 编码格式,但 ssh-keygen 生成此格式的私钥和 public 其他格式的密钥,适用于 authorized_keys 目录中的 ~/.ssh
文件(您可以打开密钥使用文本编辑器查看格式之间的差异)。
尝试在 OSX Yosomite 10.10.2
上通过命令行加密短信创建了 public .pem
密钥,如下所示:
ssh-keygen -f ~/.ssh/id_rsa.pub -e -t PKCS8 > id_rsa.pem
如果我尝试加密 myMessage.txt
openssl rsautl -encrypt -inkey ~/.ssh/id_rsa.pem -pubin -in ~/Desktop/myMessage.txt -out ~/Desktop/encrypted.txt
我得到unable to load Public key
如果我再输入:
openssl asn1parse -in id_rsa.pem
Returns: Error: offset too large
但我不知道如何修复它。 我应该更改什么才能使其正常工作?
仍然不知道我的问题出了什么问题,但找到了解决方案:
1) 生成 RSA 密钥:
$ openssl genrsa -out key.pem 1024
$ openssl rsa -in key.pem -text -noout
2) 在 pub.pem 文件中保存 public 键:
$ openssl rsa -in key.pem -pubout -out pub.pem
$ openssl rsa -in pub.pem -pubin -text -noout
3) 加密一些数据:
$ echo test test test > file.txt
$ openssl rsautl -encrypt -inkey pub.pem -pubin -in file.txt -out file.bin
4) 解密加密数据:
$ openssl rsautl -decrypt -inkey key.pem -in file.bin
它就像一个魅力
感谢 Marek Marcola 提供的信息http://openssl.6102.n7.nabble.com/Re-Can-I-use-my-own-keys-with-openssl-for-RSA-enc-dec-td12506.html
我也遇到过这个问题,觉得这里有一个很好的提示:
How can I transform between the two styles of public key format, one "BEGIN RSA PUBLIC KEY", the other is "BEGIN PUBLIC KEY"
OpenSSL 加密命令似乎需要 SSL public 密钥而不是 RSA public 密钥。
我们现在知道的足够多,可以调整示例以使其工作。 可以使用
从 RSA public 密钥生成 SSL public 密钥openssl rsa -in id_rsa.pem -RSAPublicKey_in -pubout > id_pub.pem
然后可以使用
进行加密步骤openssl rsautl -encrypt -inkey id_pub.pem -pubin -in ~/Desktop/myMessage.txt -out ~/Desktop/encrypted.txt
在撰写本文时,MacOSX Yosemite 中的默认 OpenSSL 命令似乎是 0.9.8zg。此版本中的 rsa 命令不支持 运行 上面第一个命令的功能。我通过安装 OpenSSL 1.0.1p 解决了这个问题。
我在从证书中提取 public 密钥时遇到了同样的问题。
openssl x509 -pubkey -noout -in cert.crt > pubKey.pem
后来,我想用下面的命令打印有关密钥的信息。
openssl rsa -text -pubin -in pubKey.pem
并出现错误:unable to load Public Key
解决方案
我在记事本++中打开pubKey.pem,在编码菜单中选择了UCS-2 LE BOM。所以我改成了UTF-8编码。 pubKey.pem 的大小在更改编码后是原来的一半。然后它就像魅力一样。
在 Windows 和 powershell
中测试您的初始解决方案应该有效,您只是有一个小错字:要指定密钥格式 (PKCS8),使用“-m”选项而不是“-t”选项(它代表密钥类型:dsa, ecdsa、ed25519 或 rsa)。请参阅 ssh-keygen 手册页。
ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8 > id_rsa.pem
然后,你可以用这个加密:
openssl rsautl -encrypt -inkey ~/.ssh/id_rsa.pem -pubin -in ~/Desktop/myMessage.txt -out ~/Desktop/encrypted.txt
而且,您可以使用以下方式解密:
openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in ~/Desktop/encrypted.txt -out ~/Desktop/decrypted.txt
您可以使用文本编辑器或此 diff 命令检查原始文件和解密文件之间的差异:
diff ~/Desktop/myMessage.txt ~/Desktop/decrypted.txt
事实上,openssl rsautl -encrypt 命令需要一个 public 密钥和 "PEM PKCS8 public key" 编码格式,但 ssh-keygen 生成此格式的私钥和 public 其他格式的密钥,适用于 authorized_keys 目录中的 ~/.ssh
文件(您可以打开密钥使用文本编辑器查看格式之间的差异)。