我正在使用cmd 及其for 循环以及certUtil,它们都应该预先安装。
打开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 公钥在哪里?
通常密钥保存在用户主目录下的.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。在我的例子中,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 Studio 的adbkey.pub 的第一个字段:"tokens=1")
Base64 解码以接收文件 tmp.key_bytes 中的实际公钥:
certUtil -decode tmp.key_base64 tmp.key_bytes
使用 MD5 散列密钥:
certUtil -hashfile tmp.key_bytes MD5