将 ssh 公钥指纹计算到 base64 中,为什么我有一个额外的"="?



ssh-keygen -lf ssh_host_rsa_key.pub给出:

2048 SHA256:nVDFXqK06A4dwQYjBR3MHglFllTCjSHVNgYcCeRCNaQ root@tianhe-windy (RSA)

然后我尝试自己计算sha256指纹。

cat ssh_host_rsa_key.pub给出:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/Ukz/o8b2L4fYyACOJOnFh8KOE/DypW9Dt3s8gZqKTb3W2BPmghLZyFeMQAjpVLJ/z414ydvb67AE9nyOQq1oMRbAyjbu97ocJ4UHXM6UO0wSRUF/fwtxfPju2p2hbVN7PqCV5+3cDUEIR1mVM8j6sdT7YbMTsZJab9gDlLD76ZKLCYLR1GSHNbxDp4DpMAkJsoS8F6ee+OwV6SiDvI3N6XDwrAASLNy09s2eid3H1YUSq276J5TLsZiKMPDgs7O3Tw2uMPkdzTdWSYJ/w0hyVO5YZW44JzSxg3PubV08eHPQWi17RwT7fa+QPvRw87YnACzFusZHOxQDxzQfCohH root@tianhe-windy

我将base64编码的公钥从 A复制到 H,没有whitespaces。

然后我做:

import hashlib
import base64
b64pubkey = 'AAAAB3NzaC1yc2EAAAADAQABAAABAQC/Ukz/o8b2L4fYyACOJOnFh8KOE/DypW9Dt3s8gZqKTb3W2BPmghLZyFeMQAjpVLJ/z414ydvb67AE9nyOQq1oMRbAyjbu97ocJ4UHXM6UO0wSRUF/fwtxfPju2p2hbVN7PqCV5+3cDUEIR1mVM8j6sdT7YbMTsZJab9gDlLD76ZKLCYLR1GSHNbxDp4DpMAkJsoS8F6ee+OwV6SiDvI3N6XDwrAASLNy09s2eid3H1YUSq276J5TLsZiKMPDgs7O3Tw2uMPkdzTdWSYJ/w0hyVO5YZW44JzSxg3PubV08eHPQWi17RwT7fa+QPvRw87YnACzFusZHOxQDxzQfCohH'
sha256 = hashlib.sha256()
sha256.update(base64.b64decode(b64pubkey))
b64fingerprint = base64.b64encode(sha256.digest())
print(b64fingerprint)

并获得

nVDFXqK06A4dwQYjBR3MHglFllTCjSHVNgYcCeRCNaQ=

ssh-keygen caCAIL的一个:

相比

nVDFXqK06A4dwQYjBR3MHglFllTCjSHVNgYcCeRCNaQ

计算ssh_host_ecdsa_key.pub时,我也会获得额外的=

我做错了什么?

没有错,只是SSH通过惯例省略了任何尾随的填充。您也可以自己删除任何尾随的=签名;他们没有编码任何数据。

Python base64例程实现了标准base64算法,该算法指定以返回四个字符的编码数据中的一个甚至多个。我相信,起源来自电子邮件的MIME标准。

相关内容

最新更新