因此,场景是:假设我是 Bob,我想为 Alice 加密一些消息。我拥有的唯一公钥是她的ssh-rsa
id_rsa.pub,如下所示:
SSH-RSA AAAAB3NzaC1yc2EAAAABIwAAAQEAyb+qaZLwgC7KAQJzYikf3XtOWuhlMXVv2mbTKa5dp0sHPRd2RaYnH8ZRkt7V8bjqct1IHGCuxI8xyoEp4at3FHe6j9RfWiarc1ldLUCmTtryI0GGpRs6Zpvqdtpcq/1NCIYtUQAvsImyEFCtqmB2suDo1ZSllZ Q0x9TCKHdCANYIOeaniuFzR57POgE3vxk/r6PO24oy8BIWqxvi29r0n1LUigVBJ7CmMHuzb4/+i1v6PxV1Lqnj6osPP9GpXpsh8kLUCby/KcmcryWNdSP0esyCdDxkA5hlIuk8qL1vzsyPluUQuc0BEHu6nuw8WQlCF1mFFxcpJL+MhWEr01WIIw==[电子邮件保护]
那么,有没有办法用这个公钥加密字符串,以便她可以使用她的私钥id_rsa
(从生成ssh-keygen
)来解密消息?
(我知道如果您使用密钥对文件,这马上就可以实现.pem
。如果您能向我展示如何将其转换为支持的格式openssl
,那就太好了!)
谢谢!
答案1
可以将您的 ssh 公钥转换为 PEM 格式('openssl rsautl' 可以读取它):
例子:
ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8 > id_rsa.pem.pub
假设“myMessage.txt”是您的消息,应该用公钥加密。
然后只需使用 openssl rsautl 和转换后的 PEM 公钥加密您的消息,就像平常一样:
openssl rsautl -encrypt -pubin -inkey id_rsa.pem.pub -ssl -in myMessage.txt -out myEncryptedMessage.txt
结果是“myEncryptedMessage.txt”中的加密消息
要测试你使用 Alice 的私钥解密的工作:
openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in myEncryptedMessage.txt -out myDecryptedMessage.txt
答案2
尝试一下ssh-vault它使用 ssh-rsa 公钥加密“创建保险库”,使用 ssh-rsa 私钥解密“查看保险库内容”
答案3
看https://www.bjornjohansen.com/encrypt-file-using-ssh-key。其理念是生成一个一次性的对称密钥,该密钥足够短,可以使用 SSH 公钥进行加密。然后,您使用对称密钥加密您的文本,并将加密文本和加密密钥都发送给收件人。
答案4
为什么不采用非常明显的方式来做到这一点,而不需要滚动自己的加密。
Alice sftps 至[电子邮件保护]设置为仅允许对帐户 alice 进行公钥身份验证。ssh 的属性很好地确保了只有 alice 可以进行身份验证。即使是中间人攻击也会失败,因为(假设您禁用 ssh1 并坚持正确的设置)使用 DH 的初始通信会创建一个 alice 和 bob 都知道的值,但中间人不知道,这可用于验证没有回复或 MITM 攻击可以看到通信的内容。
因此让 alice sftp 进入你的盒子并下载文件。