次の64バイトのエンコードされた文字列として公開鍵を持っています
AAAAB3NzaC1yc2EAAAADAQABAAABAQDapfZSmaVBZimVC7YAsISc+fKzuhbVmmbJNYELWov4ZVbdbFxf790xC0sKQTmbe1iDt25DdsandggApKZh6yvWD0Li5RV+h5wV6chTNwOUe6A7Q4Y4nbMozxTzT0vpMOzZv8+RffzbSnS9GVin/4BACnih10tYzwgCe6y3ei3E5hytSGMkviYIcRQ5x4W2KgSa+BXRSGnpYU69u/b/uF7KDaIhcMqenZBy5YKt4nBYnbKFAgUk/yZRrPq9knVqXO+cQ3ZZlF1KNnrx+o3oR9OqtgjqFyXMyFIiT4oqtXXiVNmoc5C+kg7pDxR4Fcr15xTJpZl8kc8qt+WS5QpLgJjT
pythonでsha256ダイジェストを実行し、次のように結果をbase64で出力する場合:
sha256 = hashlib.sha256()
sha256.update(plaintext.encode())
hash_sha256 = sha256.digest()
print(base64.b64encode(hash_sha256))
指紋を取得したときとは違う指紋を取得した
ssh-keygen -lf key.pub
Sha256フィンガープリントは公開鍵のsha256にすぎないと思っていました... key.pub
ファイルの内容も正確に追加してみました。
ssh-rsa ... user@Host
しかし、私はまた別の結果を得ます
では、フィンガープリントはどのように正確に計算されますか?同じことがMD5にも当てはまりますか?
残念ながら、完全なコードは表示されませんでした。つまり、コード内のplaintext
がどこから来ているのか明確にされていません。私の推測では、base64でエンコードされた公開鍵を最初にデコードするのではなく、エンコードされたキーを直接ダイジェストに送りました。次は私のために働きます:
b64pubkey='AAAAB3Nz....' # base64 encoded public key
sha256 = hashlib.sha256()
sha256.update(base64.b64decode(b64pubkey))
hash_sha256 = sha256.digest()
print(base64.b64encode(hash_sha256))
私はあなたにそれを思い出させたいと思います:
ssh-keygen
によって計算されたbase64フィンガープリントは次のようになります。
慣例によるSSHは、末尾のパディング(パディング
=
s)を省略します
ここで私の質問を参照してください https://stackoverflow.com/questions/56769749/calculate-ssh-public-key-fingerprint-into-base64-why-do-i-have-an-extra