ssh-keygen no imprimirá el símbolo '=' en sha256 de pubkey, pero python lo hará

3

Cuando corro

ssh-keygen -lf my_key.pub

Obtengo una huella digital del tipo:

something

Cuando lo hago con la misma clave pública codificada en base64, pero en python, con el código

    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))

me sale

something=

¿Qué es ese = al final y cuál es el correcto?

    
pregunta Guerlandi 01.03.2017 - 23:32
fuente

1 respuesta

5

base64 usa signos iguales para el relleno si el número de bytes codificados no es un múltiplo de 3. Sin embargo, el relleno no siempre es obligatorio y su uso varía según las implementaciones:

  

En teoría, el carácter de relleno no es necesario para la decodificación, ya que el número de bytes faltantes se puede calcular a partir del número de dígitos de Base64. En algunas implementaciones, el carácter de relleno es obligatorio, mientras que para otras no se utiliza.

(Source)

Por ejemplo, como esta cadena solo tiene 7 bytes, == se agrega para rellenar el valor a un múltiplo de 3:

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

Así que ambas variantes son correctas. En caso de duda, utilice el relleno.

    
respondido por el Arminius 02.03.2017 - 00:05
fuente

Lea otras preguntas en las etiquetas