使用正则表达式进行ssh-rsa公钥验证

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,但它们不太常见.