如何使用 ssh-rsa 公钥加密文本?

sik*_*chu 75 encryption openssl

所以,场景是:鉴于我是鲍勃,我想为爱丽丝加密一些消息。我唯一的公钥是她的ssh-rsaid_rsa.pub 像这样:

SSH-RSA AAAAB3NzaC1yc2EAAAABIwAAAQEAyb + qaZLwgC7KAQJzYikf3XtOWuhlMXVv2mbTKa5dp0sHPRd2RaYnH8ZRkt7V8bjqct1IHGCuxI8xyoEp4at3FHe6j9RfWiarc1ldLUCmTtryI0GGpRs6Zpvqdtpcq / 1NCIYtUQAvsImyEFCtqmB2suDo1ZSllZQ0x9TCKHdCANYIOeaniuFzR57POgE3vxk / r6PO24oy8BIWqxvi29r0n1LUigVBJ7CmMHuzb4 / + i1v6PxV1Lqnj6osPP9GpXpsh8kLUCby / KcmcryWNdSP0esyCdDxkA5hlIuk8qL1vzsyPluUQuc0BEHu6nuw8WQlCF1mFFxcpJL + MhWEr01WIIw == sikachu@Sikachus-Notebook.local

那么,有没有办法使用这个公钥加密一个字符串,这样她就可以使用她的私钥id_rsa(从 生成ssh-keygen)来解密消息?

(我知道如果您正在使用.pem密钥对文件,则可以立即使用。如果您能告诉我如何将其转换为openssl支持的格式,那也很棒!)

谢谢!

小智 98

可以将您的 ssh 公钥转换为 PEM 格式('openssl rsautl' 可以读取它):

例子:

ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8 > id_rsa.pem.pub
Run Code Online (Sandbox Code Playgroud)

假设 'myMessage.txt' 是你的消息,应该是公钥加密的。

然后像往常一样使用 openssl rsautl 和转换后的 PEM 公钥加密您的消息:

openssl rsautl -encrypt -pubin -inkey id_rsa.pem.pub -ssl -in myMessage.txt -out myEncryptedMessage.txt
Run Code Online (Sandbox Code Playgroud)

结果是您在“myEncryptedMessage.txt”中的加密消息

要测试您使用 Alice 的私钥解密的工作:

openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in myEncryptedMessage.txt -out myDecryptedMessage.txt
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这仅在文件足够小时才有效。例如 200 字节。请参阅 http://stackoverflow.com/questions/7143514/how-to-encrypt-a-large-file-in-openssl-using-public-key (9认同)
  • 我将其封装在一个脚本中,该脚本从 GitHub 中提取用户公钥。https://github.com/twe4ked/catacomb (5认同)
  • 回应@hyh 所说的,这仅在输入文件很小时才有效(该行大约为 254 字节,否则它将给出“rsa 例程:RSA_padding_add_SSLv23:数据对于密钥大小来说太大:/SourceCache/OpenSSL098/OpenSSL098-52.20。 2/src/crypto/rsa/rsa_ssl.c:73" 错误。 (3认同)