
Como administrador del sistema, es posible que haya oído hablar de la codificación Base64 utilizada en el contexto de certificados o herramientas que aceptan y almacenan datos en un formato codificado. Utilizando la codificación Base64 en OpenSSL, Secretos de Kubernetesaplicaciones de correo electrónico y muchas otras tecnologías.
A pesar de la ubicuidad de Base64, muchos administradores de sistemas saben muy poco sobre cómo funciona realmente este formato de codificación. Conocer Base64 puede ayudarlo a comprender mejor cómo las herramientas en las que confía y respalda almacenan y usan sus datos. También le permite usar la codificación Base64 en sus propias aplicaciones y scripts.
Este artículo lo guiará a través de los aspectos teóricos de la codificación Base64.Una vez que explique este formato de codificación simple, presentaré base64
Utilidades de línea de comandos que se pueden usar para codificar y decodificar datos. Finalmente, proporciono algunos ejemplos prácticos de codificación Base64 que puede encontrar como administrador del sistema.
Cómo funciona Base64
Fundamentalmente, Base64 se utiliza para codificar datos binarios en texto imprimible. Esto le permite transferir archivos binarios a través de protocolos o medios que no pueden manejar formatos de datos binarios y requieren texto simple.
[ Download now: A sysadmin’s guide to Bash scripting. ]
Base64 utiliza caracteres de 6 bits agrupados en secuencias de 24 bits.Por ejemplo, considere la oración Hola\nen \norte Representa un carácter de nueva línea. El primer paso en el proceso de codificación es obtener la representación binaria de cada carácter ASCII.Esto se puede hacer por Tabla de conversión de ASCII a binario.
ASCII usa 8 bits para representar un solo carácter, pero Base64 usa 6 bits. Por lo tanto, el archivo binario debe dividirse en fragmentos de 6 bits.
Finalmente, estos valores de 6 bits se pueden obtener usando Mesa Base64.
Dado que Base64 usa secuencias de 24 bits, relleno Requerido cuando el binario sin procesar no se puede dividir en secuencias de 24 bits. Es posible que haya visto este tipo de relleno antes con el signo igual impreso (=). P.ej, Hola Ningún salto de línea está representado por solo dos caracteres ASCII de 8 bits (16 bits en total). El modo de codificación Base64 elimina el relleno al decodificar datos.
Codifique y decodifique Base64 en la línea de comando
Ahora que comprende cómo funciona la codificación Base64, puede usarla desde la línea de comandos.puedes usarlo base64
Utilidades de línea de comandos para codificar y decodificar archivos o entrada estándar. Por ejemplo, para codificar el ejemplo anterior:
$ echo Hi | base64
SGkK
[ Keep your favorite Git commands, aliases, and tips close at hand. Download the Git cheat sheet. ]
Puede decodificar datos codificados en Base64 usando -d
bandera:
$ echo SGkK | base64 -d
Hi
Pruebe algunos ejemplos de Base64
La codificación con Base64 puede parecer esotérica, pero hay muchos escenarios comunes en los que encontrará Base64 en la administración del sistema. Saber cómo identificar, codificar y decodificar Base64 es valioso debido a su popularidad como método de codificación.
Uno de los casos de uso más comunes es la codificación de certificados. Si ha utilizado las herramientas de OpenSSL, habrá visto varios ejemplos de certificados codificados en Base64. La estructura del certificado codificado en base64 a menudo se denomina formato de correo con privacidad mejorada (PEM), pero los certificados son datos binarios por naturaleza. Un certificado PEM se puede convertir a sus reglas de codificación distinguida binaria (DER) equivalentes mediante la decodificación de datos codificados en Base64.
Para ver esto en acción, puede obtener un certificado codificado PEM y un certificado DER binario para redhat.com:
# Download the certificate in Base64 encoded PEM format
$ echo | openssl s_client -connect www.redhat.com:443 2>/dev/null | openssl x509 -outform pem -out redhat.com.pem
# Download the certificate in binary DER format
$ echo | openssl s_client -connect www.redhat.com:443 2>/dev/null | openssl x509 -outform der -out redhat.com.cer
# Confirm that the PEM encoded certificate contains printable, Base64 encoded data
$ head redhat.com.pem
-----BEGIN CERTIFICATE-----
MIIHNjCCBh6gAwIBAgIQCVe4E0h49mzI0NcSqMy1+jANBgkqhkiG9w0BAQsFADB1
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMTQwMgYDVQQDEytEaWdpQ2VydCBTSEEyIEV4dGVuZGVk
IFZhbGlkYXRpb24gU2VydmVyIENBMB4XDTIxMTIwMTAwMDAwMFoXDTIyMTIwMTIz
NTk1OVowgcoxHTAbBgNVBA8MFFByaXZhdGUgT3JnYW5pemF0aW9uMRMwEQYLKwYB
BAGCNzwCAQMTAlVTMRkwFwYLKwYBBAGCNzwCAQITCERlbGF3YXJlMRAwDgYDVQQF
EwcyOTQ1NDM2MQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xpbmEx
EDAOBgNVBAcTB1JhbGVpZ2gxFjAUBgNVBAoTDVJlZCBIYXQsIEluYy4xFzAVBgNV
BAMTDnd3dy5yZWRoYXQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
El certificado PEM codificado en Base64 se puede decodificar base64
Ordenar. Puede ver que es exactamente igual que el binario guardado anteriormente con OpenSSL:
# Decode the certificate and save it to redhat.com.decoded
$ tail +2 redhat.com.pem | head -n -1 | base64 -di > redhat.com.decoded
# Confirm that the decoded file and the original binary file are the same
$ md5sum redhat.com.decoded redhat.com.cer
8085b86934f6ff4abddac42793aed92f redhat.com.decoded
8085b86934f6ff4abddac42793aed92f redhat.com.cer
# Confirm that OpenSSL can inspect the decoded certificate file
$ openssl x509 -inform der -in redhat.com.decoded -noout -dates
notBefore=Dec 1 00:00:00 2021 GMT
notAfter=Dec 1 23:59:59 2022 GMT
Otro uso común para la codificación Base64 es Secretos de KubernetesLos secretos de Kubernetes contienen pares clave/valor donde el valor está codificado en Base64. Por ejemplo, crear y leer un secreto muestra que el valor del secreto está codificado en Base64:
# Create a secret
$ kubectl create secret generic --from-literal=api-key=SuperSecret123! api-secrets
secret/api-secrets created
# The secret value appears to be encoded
$ kubectl get secret api-secrets -o yaml
apiVersion: v1
data:
api-key: U3VwZXJTZWNyZXQxMjMh
kind: Secret
metadata:
creationTimestamp: "2022-07-26T18:35:00Z"
name: api-secrets
namespace: default
resourceVersion: "5419"
uid: ac23136b-4b51-4df1-b732-cff0195fff6b
type: Opaque
Los secretos existentes se pueden utilizar base64
comando después de recuperarlos kubectl
:
# Read back the encoded secret using a jsonpath
$ kubectl get secret api-secrets -o jsonpath={.data.api-key}
U3VwZXJTZWNyZXQxMjMh
# Decode the secret by piping it into the base64 command
$ kubectl get secret api-secrets -o jsonpath={.data.api-key} | base64 -d
SuperSecret123!
La codificación Base64 codifica datos binarios utilizando caracteres imprimibles. Esto habilita otro caso de uso interesante: puede codificar archivos multilínea como cadenas Base64. Aunque es raro, puede encontrar software o scripts que acepten un archivo de configuración completo como una cadena codificada en Base64.
Considere el siguiente archivo de configuración, que es un diccionario YAML:
$ cat config.yaml
allowed_users:
- name: alice
group: admins
- name: bob
group: powerusers
allowed_groups:
- admins
- powerusers
- secops
Intentar almacenarlo como una variable de entorno no funciona porque faltan las líneas nuevas:
$ CONFIG=$(cat config.yaml)
$ echo $CONFIG
allowed_users: - name: alice group: admins - name: bob group: powerusers allowed_groups: - admins - powerusers - secops
Sin embargo, puede codificar en Base64 el archivo de configuración y almacenar esta cadena imprimible en una variable de entorno. Entonces se puede decodificar sin ninguna pérdida de fidelidad:
# Encode the config file using base64 and disable line wrapping with -w 0 to avoid newlines in the output
$ CONFIG=$(base64 -w 0 config.yaml)
$ echo $CONFIG
YWxsb3dlZF91c2VyczoKICAtIG5hbWU6IGFsaWNlCiAgICBncm91cDogYWRtaW5zCiAgLSBuYW1lOiBib2IKICAgIGdyb3VwOiBwb3dlcnVzZXJzCmFsbG93ZWRfZ3JvdXBzOgogIC0gYWRtaW5zCiAgLSBwb3dlcnVzZXJzCiAgLSBzZWNvcHMK
# Decode the environment variable, revealing the original config file contents
$ echo $CONFIG | base64 -d
allowed_users:
- name: alice
group: admins
- name: bob
group: powerusers
allowed_groups:
- admins
- powerusers
- secops
envolver
En este artículo, aprendió cómo Base64 codifica datos desde una perspectiva teórica y aplicada.También viste cómo usar base64
comandos y cómo esto puede ser útil en situaciones comunes como los secretos de Kubernetes.
Como con cualquier tecnología, una comprensión más profunda de los conceptos básicos detrás de Base64 le permite aprovechar este formato de codificación cuando sea apropiado.
[ Learn how to manage your Linux environment for success. ]