如何验证用户上传的 id_rsa.pub 确实是一个 public key 文件呢?

2013-08-12 09:53:57 +08:00
 Livid
4520 次点击
所在节点    程序员
11 条回复
kingwkb
2013-08-12 09:56:18 +08:00
他本身就是一个随机字符串吧
felix021
2013-08-12 10:05:49 +08:00
我觉得验证一下格式是否这样就行了:"ssh-rsa key user@host",其中key必须是base64加密后的字符串。

如果想要进一步验证,可以把key用base64解密以后,验证它是否是一个素数(费马检测什么的)。
Livid
2013-08-12 10:06:52 +08:00
@felix021 中间的 key 这段长度是固定的么?
myoula
2013-08-12 10:11:31 +08:00
likexian
2013-08-12 10:12:56 +08:00
felix021
2013-08-12 10:18:18 +08:00
@Livid 不是。它只是找一个至少XXX位的随机素数,再加上base64编码也不完全是定长的。我看了下我手头的两个id_rsa.pub,两个素数分别是277字节/279字节。
felix021
2013-08-12 10:20:04 +08:00
@Livid 根据4L链接里的内容,这个base64 decode出来的还不只是个素数,貌似还有其他的控制信息,不过用那个命令来验证倒是不错。
tension
2013-08-12 10:21:40 +08:00
我的是开头 ssh-rsa 412 byte
jybox
2013-08-12 11:26:42 +08:00
openssl读入再导出呗,成功了就是正确的
stackpop
2013-08-12 11:29:00 +08:00
2楼正解
nybux
2013-08-12 11:37:54 +08:00
ssh-keygen 的 -l参数可以显示密钥指纹

-> % ssh-keygen -l -f id_rsa.pub
2048 91:2e:88:4c:78:58:f8:4d:e4:96:61:31:3a:71:93:65 xxxxxxx@gmail.com (RSA)

-> % ssh-keygen -l -f libpeerconnection.log
libpeerconnection.log is not a public key file.

根据命令返回值就知道了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/78798

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX