如何在Windows上获取RSA公钥的MD5指纹?

时间:2018-02-26 16:06:17

标签: windows cmd rsa md5 public-key

序言:使用Android Studio并将我的“Hello World”应用推送到手机,我收到了一个确认对话框:

  

允许USB调试?

     

计算机的RSA密钥指纹是:

     

<some_md5_fingerprint>

     

[]始终允许从此计算机

     

取消确定

虽然我很确定这是我的机器试图连接,但我问自己如何确认。

这引发了另外两个具体问题:

  • RSA公钥在哪里?
  • 如何获取RSA公钥的MD5指纹?

此外,我想要一个广泛使用的答案,因此解决方案应该适用于每个Windows(在我的情况下为win7)用户,而无需安装软件。

1 个答案:

答案 0 :(得分:1)

我正在使用cmd及其for循环以及certUtil这些都应预先安装。

打开cmd
  • Windows Key + R 并输入cmd然后确认,或
  • 打开Windows“开始”菜单,搜索cmd.exe并执行。

<强> TLDR

for /F "tokens=2" %a in (id_rsa.pub) DO (echo %a) > tmp.key_base64
certUtil -decode tmp.key_base64 tmp.key_bytes
certUtil -hashfile tmp.key_bytes MD5

RSA公钥在哪里?

通常,密钥保存在用户家中的.ssh目录中。

(Android Studio将不同的(!)键adbkey.pub存储在用户主目录下的目录.android中,并在其安装目录中C:\Android\.android - 两个密钥都发布到在上述序言中提到的过程中电话。)

打开控制台后,您应该已经在主目录中,只需要更改为.ssh

C:\Users\%USERNAME%>cd .ssh

如果您不在主目录中,请输入

cd \Users\%USERNAME%\.ssh

并执行。

(对于Android Studio,分别将目录更改为\Users\%USERNAME%\.android\Android\.android。)

如何获取RSA公钥的MD5指纹?

为此,我需要知道文件中的实际密钥是base64编码的部分,即long cryptic string of characters。在我的情况下,键字段后面总是跟着用户 - 主机字段,即类似user@domain.com(也是unknown@unknown)的字符串,在某些字符串中案例前面有一个包含ssh-rsa的字段。

在后一种情况下,我需要过滤第二个字段。在Windows中,显然,这是使用for循环完成的。我还将输出发送到文件以便certUtil进行后续消解,其输出再次进入文件 - 包含不再是base64编码但以字节为单位的密钥 - 最后使用MD5进行哈希处理。

id_rsa.pub的第二个字段中的密钥提取到名为tmp.key_base64的文件中:

for /F "tokens=2" %a in (id_rsa.pub) DO (echo %a) > tmp.key_base64

(Android Studio adbkey.pub的第一个字段:"tokens=1"

Base64解码以接收文件tmp.key_bytes中的实际公钥:

certUtil -decode tmp.key_base64 tmp.key_bytes

使用MD5散列密钥:

certUtil -hashfile tmp.key_bytes MD5