嗨,我是密码学的新手,不知道该怎么做。所以我从 Putty 会话中获取了一个公钥,它看起来像这样:
0x23,0xa69e43f72f1d8f07a6baae6ea0b0ce81cbe949345a0a5e307ae89e9cf58b20a17571af39e951faf61c45ef2ca9e21897eb9bc226473783ed9c3f6e30c4a84fa625373af96f41f8d9670484b52a33072eae6bb5433a2f00c672c20d7a03636a1b26af15b0d3ed376b9699e8653caa198637be88282333e8038bed63b9a2c6d179
通过搜索互联网,我发现以下线程中出现了相同的格式,所以我知道第一个十六进制值是指数,第二个值是模数。但我找不到任何关于如何使用这两个值来获取简单公钥的信息。 http://winscp.net/forum/viewtopic.php?t=5850
我的问题是:如何将密钥从 ergo base64 转换为标准 openssh?
希望有人可以帮忙。
答案1
在不同格式之间转换密钥的通常方法是使用相应程序的密钥生成程序,该程序通常也具有一些转换选项。
在您的情况下,可以使用 PuttyGen 程序将 Putty 密钥转换为其他格式。
这文档解释如何以 GUI 方式执行此操作(您需要用于粘贴到 authorized_keys 文件中的公钥格式)。
在 Ubuntu 上使用 PuTTY ssh 密钥和 OpenSSH似乎也展示了一种命令行方式来执行此操作:
puttygen /path/to/puttykey.ppk -L > ~/.ssh/id_rsa.pub
(我没有尝试过这个,其中一条评论说它不起作用 - 请查看文档。)
答案2
这是一个两阶段的过程。首先将十六进制转换为字节数组。其次将字节数组转换为 Base64 字符串。您可能会发现库函数有助于 Base64,转换器在网络上很常见。我假设您可以进行十六进制到字节的转换,或者可以使用库函数。请注意,库函数不仅仅是将 ASCII 字符转换为十六进制,即您的"0x23"
字符串被转换为{ 0x23 }
而不是{ 0x32, 0x33 }
。