将openssh公钥转换为ssh2(RFC 4716)格式

Kau*_* NP 7 java openssh

主要问题就是这样.解析openssh公钥以rfc 4716符合格式.唯一的问题是它必须在java中.

使用ssh-keygen,它只是单行命令:

ssh-keygen -e -f openssh_key.pub
Run Code Online (Sandbox Code Playgroud)

不幸的是,我在Java中找不到任何其他来源.甚至没有提到转换所需的任何算法或步骤.所有这些都围绕着ssh-keygen自身的使用.当然,我可以java.exec用来调用命令,但那是最糟糕的情况.


示例openssh密钥(已将其保留为代码格式,以便保留生成的空格/换行符):

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDwxgE7D3HYLYddNHLMFK8OfpRwwUSgxiB8fbecvkCUEktSpWikvsWTyCnl5p3uSmsGg/F1lwVPXuuVlQ4VZlYqMuEBEMRF9ADdXWWNxjO/Hd7688ow7ocncxl0xKXsH5Fc9GHvE8yfUh94F8Qm9x8M8Uux+XsNEvPG8KI/QUJWndIsHv+m//3nbEEqUTAlzsyY0mjHW/dPORhXcB5WeGH+cBRAhcp5JGKAq26TOsuNY8H+nrlxX6z03xbUN28HHdXv6uKZfpnVpl6tM0khxbh7F+tLYWeUIZ+nYaDBPINv8Mkd6Duqe/GOLtgVUIR76Adijok4w5oaKlTq27xzMurl kaushik@kaushik-HP
Run Code Online (Sandbox Code Playgroud)

使用ssh-keygen解析:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "2048-bit RSA, converted by kaushik@kaushik-HP from OpenSSH"
AAAAB3NzaC1yc2EAAAADAQABAAABAQDwxgE7D3HYLYddNHLMFK8OfpRwwUSgxiB8fbecvk
CUEktSpWikvsWTyCnl5p3uSmsGg/F1lwVPXuuVlQ4VZlYqMuEBEMRF9ADdXWWNxjO/Hd76
88ow7ocncxl0xKXsH5Fc9GHvE8yfUh94F8Qm9x8M8Uux+XsNEvPG8KI/QUJWndIsHv+m//
3nbEEqUTAlzsyY0mjHW/dPORhXcB5WeGH+cBRAhcp5JGKAq26TOsuNY8H+nrlxX6z03xbU
N28HHdXv6uKZfpnVpl6tM0khxbh7F+tLYWeUIZ+nYaDBPINv8Mkd6Duqe/GOLtgVUIR76A
dijok4w5oaKlTq27xzMurl
---- END SSH2 PUBLIC KEY ----
Run Code Online (Sandbox Code Playgroud)

更新:我已经为任何有类似需求的人创建了gist转换实现.

小智 4

两种格式的 Base64 数据是相同的——您不需要做任何花哨的事情。要在这些格式之间进行转换,您所需要做的就是添加/删除换行符(70 个字符)并更改标题/预告片。

请注意,两种格式都有注释 -kaushik@kaushik-HP在 OpenSSH 密钥中以及Comment:PEM 密钥中以 开头的行。两者都是完全可选的,不需要转换。