如何获取 Windows 上的 RSA public 密钥的 MD5 指纹?

How to get the MD5 fingerprint for an RSA public key on Windows?

序言: 使用 Android Studio 并将我的“Hello World”应用推送到 phone,我看到了这样的确认对话框:

Allow USB debugging?

The computer's RSA key fingerprint is:

<some_md5_fingerprint>

[] Always allow from this computer

CANCEL OK

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

这又产生了两个 具体问题:

此外,我想要一个广泛使用的答案,以便每个 Windows(在我的例子中是 win7)用户都可以使用该解决方案,而无需安装软件。

我正在使用 cmd 和它的 for 循环以及 certUtil 都应该 pre-installed.

打开cmd
  • +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 public 密钥在哪里?

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

(Android Studio 存储不同的 (!) 密钥,adbkey.pub,在用户主目录下的目录 .android 及其安装目录中,这里是 C:\Android\.android -在上面序言中提到的过程中,两个密钥都被发给了 phone。)

打开控制台后你应该已经在你的家目录下了,只需要换成.ssh

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

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

cd \Users\%USERNAME%\.ssh

并执行。

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

如何获取 RSA public 密钥的 MD5 指纹?

为此,我需要知道文件中的实际密钥是 base64 编码的部分,即 long cryptic string of characters。在我的例子中,key field 后面总是跟着 user-host field,即像 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 工作室 adbkey.pub 的第一个字段:"tokens=1"

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

certUtil -decode tmp.key_base64 tmp.key_bytes

使用 MD5 散列密钥:

certUtil -hashfile tmp.key_bytes MD5