尝试在 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
但我不知道如何解决它。 我应该更改什么才能使其正常工作?
仍然不知道我的问题出了什么问题,但找到了解决方案:
生成RSA密钥:
$ openssl genrsa -out key.pem 1024
$ openssl rsa -in key.pem -text -noout
将公钥保存在 pub.pem 文件中:
$ openssl rsa -in key.pem -pubout -out pub.pem
$ openssl rsa -in pub.pem -pubin -text -noout
加密一些数据:
$ echo test test test > file.txt
$ openssl rsautl -encrypt -inkey pub.pem -pubin -in file.txt -out file.bin
解密加密数据:
$ openssl rsautl -decrypt -inkey key.pem -in file.bin
它就像一个魅力
我也遇到了这个问题,并认为这里有一个很好的提示:
两种公钥格式如何转换,一种是“BEGIN RSA PUBLIC KEY”,另一种是“BEGIN PUBLIC KEY”
OpenSSL 加密命令似乎需要 SSL 公钥而不是 RSA 公钥。
我们现在已经了解了足够的信息来调整示例以使其正常工作。 SSL 公钥可以通过 RSA 公钥生成:
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 解决了这个问题。
openssl x509 -pubkey -noout -in cert.crt > pubKey.pem
之后,我想用下面的命令打印有关密钥的信息。
openssl rsa -text -pubin -in pubKey.pem
并收到错误:
unable to load Public Key
解决方案
我在记事本++中打开pubKey.pem,并在Encoding菜单中选择了UCS-2 LE BOM。所以我把它改成了UTF-8编码。更改编码后,pubKey.pem 的大小是原始大小的一半。然后它就像魅力一样发挥作用。
在 Windows 和 powershell 中测试
ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8 > id_rsa.pem然后,您可以使用以下方法进行加密:
openssl rsautl -加密 -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 ~/Desktop/myMessage.txt ~/Desktop/decrypted.txt事实上,
openssl rsautl -encrypt命令需要一个具有“PEM PKCS8公钥”编码格式的公钥,但ssh-keygen生成此格式的私钥和适应于authorized_keys的其他格式的公钥文件位于~/.ssh
目录中(您可以使用文本编辑器打开密钥以查看格式之间的差异)。
# generate a PRIVATE KEY
openssl genpkey -algorithm RSA -aes-256-cbc -outform PEM -out private_key.pem -pkeyopt rsa_keygen_bits:2048
# create a passphrase made of 4 chars minimum
# SUDO ! change permissions to 600 at most
sudo chmod 600 private_key.pem
# but 400 should work and is event more secure
sudo chmod 400 private_key.pem
# SUDO again
# extract THE PUBLIC KEY in PKCS8 file format
sudo ssh-keygen -e -f private_key.pem -m PKCS8 > public_key.pem
# enter your passphrase
将 public 密钥提供给想要保护 data.in.txt 文件的人。她或他将执行以下操作来加密它:
# SUDO again
sudo openssl pkeyutl -encrypt -pubin -inkey public_key.pem -in data.in.txt -out data.enc.txt
您收到要解密的加密文件(data.enc.txt):
# SUDO again
sudo openssl pkeyutl -decrypt -inkey private_key.pem -in data.enc.txt -out data.out.txt
# then you can read the confidential information
cat data.out.txt
您可以执行相同的方法,以便他/她提取他/她的公钥,以便在发送之前加密您的公钥以保护它。