War*_*lax 9 python regex validation ssh-keys
我可以使用什么正则表达式(如果有的话)来验证给定字符串是否是合法的ssh rsa公钥?
我只需要验证实际的密钥 - 我不关心它之前的密钥类型或它之后的用户名注释.
理想情况下,有人还将提供python代码来运行正则表达式验证.
谢谢.
Jim*_*imB 11
"足够好"的检查是查看密钥是否以正确的标头开头.
密钥文件的数据部分应该从base64解码,否则它将失败并带有base64.binascii.Error
解包前4个字节(一个int),它应该是7.这是以下字符串的长度(我猜这可能不同,但你只关心ssh-rsa).
openssh_pubkey = open('keyfile').read()
type, key_string, comment = openssh_pubkey.split()
data = base64.decodestring(key_string)
int_len = 4
str_len = struct.unpack('>I', data[:int_len])[0] # this should return 7
data[int_len:int_len+str_len] == type
Run Code Online (Sandbox Code Playgroud)
或者,您可以放弃二进制检查,并查找AAAAB3NzaC1yc2EAssh-rsa密钥的开头,我仍然会验证它是否为有效的base64.
[编辑]澄清:
通过规范,第一部分,如果键是长度前缀字符串.长度打包为big-endian unsigned int('> I'表示python结构).这里是7,因为以下字符串'ssh-rsa'长7个字节.data[4:11]是接下来的7个字节(每个长度前缀),但我编辑了上面的代码,使用一些描述性变量来尝试使其更清晰.如果你想要彻底,你还应该检查ssh-dss,可能还有pgp-sign-rsa和pgp-sign-dss,但它们不太常见.
| 归档时间: |
|
| 查看次数: |
10861 次 |
| 最近记录: |