尝试在OSX Yosomite 10.10.2上通过命令行加密文本消息
像这样创建公共.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
返回:Error: offset too large
但我不知道如何解决它。 我应该改变什么才能使它发挥作用?
答案 0 :(得分:21)
仍然不知道我的问题出了什么问题,但找到了解决方案:
1)生成RSA密钥:
$ openssl genrsa -out key.pem 1024
$ openssl rsa -in key.pem -text -noout
2)将公钥保存在pub.pem文件中:
$ 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
答案 1 :(得分:2)
我也遇到了这个问题,并且认为这里有一个很好的提示:
OpenSSL加密命令似乎需要SSL公钥而不是RSA公钥。
我们现在已经足够了解调整示例以使其工作。 可以使用
从RSA公钥生成SSL公钥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解决了这个问题。
答案 2 :(得分:0)
从证书中提取公钥时,我遇到了同样的问题。
openssl x509 -pubkey -noout -in cert.crt > pubKey.pem
然后,我想在下面的命令中打印有关key的信息。
openssl rsa -text -pubin -in pubKey.pem
并收到错误消息:unable to load Public Key
解决方案
我在notepad ++中打开pubKey.pem,并在 Encoding 菜单中选择了UCS-2 LE BOM。所以我将其更改为UTF-8编码。更改编码后,pubKey.pem的大小是原始大小的一半。然后,它就像魅力。
在Windows和powershell中进行了测试
答案 3 :(得分:0)
您的初始解决方案应该可以解决,您只需输入一个较小的错字即可:要指定密钥格式(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 命令期望使用“ PEM PKCS8公共密钥”编码格式的公共密钥,但是 ssh-keygen 会以这种格式生成私有密钥,适用于~/.ssh
目录中的 authorized_keys 文件的其他格式的公共密钥(您可以使用文本编辑器打开密钥以查看格式之间的差异)。