V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Livid
V2EX  ›  程序员

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

  •  
  •   Livid · 2013-08-12 09:53:57 +08:00 · 4526 次点击
    这是一个创建于 4125 天前的主题,其中的信息可能已经有所发展或是发生改变。
    11 条回复    1970-01-01 08:00:00 +08:00
    kingwkb
        1
    kingwkb  
       2013-08-12 09:56:18 +08:00
    他本身就是一个随机字符串吧
    felix021
        2
    felix021  
       2013-08-12 10:05:49 +08:00   ❤️ 1
    我觉得验证一下格式是否这样就行了:"ssh-rsa key user@host",其中key必须是base64加密后的字符串。

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

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

    根据命令返回值就知道了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1285 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:55 · PVG 01:55 · LAX 09:55 · JFK 12:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.