ssh-keygen non stamperà il simbolo '=' in sha256 di pubkey, ma python

3

Quando corro

ssh-keygen -lf my_key.pub

Ricevo un'impronta digitale del tipo:

something

Quando lo faccio alla stessa chiave pubblica codificata base64, ma in python, con il codice

    def to_sha_256(b64pubkey):
        sha256 = hashlib.sha256()
        sha256.update(base64.b64decode(b64pubkey))
        hash_sha256 = sha256.digest()
        return hash_sha256
    def to_base_64(plaintext):
        return str(base64.b64encode(plaintext), 'utf-8')

    fingerprint = to_base_64(to_sha_256(b64pubkey))

Ottengo

something=

Che cos'è = alla fine e quale è corretto?

    
posta Guerlandi 01.03.2017 - 23:32
fonte

1 risposta

5

base64 usa segni uguali per il riempimento se il numero di byte codificati non è un multiplo di 3. Tuttavia, il padding non è sempre obbligatorio e il suo utilizzo varia tra le implementazioni:

In theory, the padding character is not needed for decoding, since the number of missing bytes can be calculated from the number of Base64 digits. In some implementations, the padding character is mandatory, while for others it is not used.

(Origine)

Ad esempio, poiché questa stringa ha solo 7 byte, == viene aggiunta per riempire il valore su un multiplo di 3:

$ echo -n "1234567" | base64
MTIzNDU2Nw==

Quindi entrambe le varianti sono corrette. In caso di dubbio, usa quello imbottito.

    
risposta data 02.03.2017 - 00:05
fonte

Leggi altre domande sui tag