Pada banyak kasus string yang di encode dengan base64 banyak menimbulkan masalah karena memiliki karakter tersembunyi ‘\n’ atau biasa diterjemahkan baris baru. Contoh pengaplikasiannya pada secret Kubernetes.
database_password:|
AeuJzHvC9vqmanb4RgKA
Bila dilihat dengan kubectl
, tidak terlihat keanehan dari secret yang kita buat
$ kubectl get secrets/superpassword --template={{.data.database_password}} | base64 -d AeuJzHvC9vqmanb4RgKA
Beberapa contoh lainnya
echo "PassS4nga74MAn" | base64 # output UGFzc1M0bmdhNzRNQW4K
decode string tersebut
echo "UGFzc1M0bmdhNzRNQW4K" | base64 -d # output PassS4nga74MAn
string yang tidak terlihat tersebut bisa kita deteksi dengan od
$ echo "UGFzc1M0bmdhNzRNQW4K" | base64 -d | od -c 0000000 P a s s S 4 n g a 7 4 M A n \n 0000017
dari hasil tersebut terlihat ada karakter \n
.
Solusi untuk kasus diatas adalah dengan menambahkan parameter -n
pada echo
echo -en "PassS4nga74MAn" | base64 # output UGFzc1M0bmdhNzRNQW4=
bila di decode
echo "UGFzc1M0bmdhNzRNQW4=" | base64 -d # output PassS4nga74MAn echo "UGFzc1M0bmdhNzRNQW4=" | base64 -d | od -c # output 0000000 P a s s S 4 n g a 7 4 M A n 0000016
Banyak Baris
Bila jumlah string lebih dari 76 karakter maka base64 akan membagi string tersebut menjadi dua baris atau lebih. Mari kita lihat pada contoh dibawah ini
echo -n "Bila jumlah string lebih dari 76 karakter maka base64 akan membagi string tersebut menjadi dua baris atau lebih" | base64 # output QmlsYSBqdW1sYWggc3RyaW5nIGxlYmloIGRhcmkgNzYga2FyYWt0ZXIgbWFrYSBiYXNlNjQgYWth biBtZW1iYWdpIHN0cmluZyB0ZXJzZWJ1dCBtZW5qYWRpIGR1YSBiYXJpcyBhdGF1IGxlYmlo
cara agar hasil encode dari base64 menjadi satu baris adalah dengan menambahkan w0
echo -n "Bila jumlah string lebih dari 76 karakter maka base64 akan membagi string tersebut menjadi dua baris atau lebih" | base64 -w0 # output QmlsYSBqdW1sYWggc3RyaW5nIGxlYmloIGRhcmkgNzYga2FyYWt0ZXIgbWFrYSBiYXNlNjQgYWthbiBtZW1iYWdpIHN0cmluZyB0ZXJzZWJ1dCBtZW5qYWRpIGR1YSBiYXJpcyBhdGF1IGxlYmlo
Contoh yang banyak digunakan adalah encode certificate, daripada menggunakan echo
, lebih baik disimpan dalam file lalu di encode dengan base64
$ base64 -w0 /tmp/sample.crt LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSU9MVENDRFJXZ0F3SUJBZ0lRRXpPU1VDRkFxTThTZ0IybUdKYUZYakFOQmdrcWhraUc5dzBCQVFzRkFEQTcKTVFzd0NRWURWUVFHRXdKVlV6RWVNQndHQTFVRUNoTVZSMjl2WjJ4bElGUnlkWE4wSUZObGNuWnBZMlZ6TVF3dwpDZ1lEVlFRREV3TlhVakl3SGhjTk1qVXdOakF5TURnek5UTXdXaGNOTWpVd09ESTFNRGd6TlRJNVdqQVhNUlV3CkV3WURWUVFEREF3cUxtZHZiMmRzWlM1amIyMHdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBUU8KNVBZK1NDTEp2UE1JR05BSzlpcmQ4U3F6ODNILzVBWnZPUW5LUzNWZmRCYXdXM1dia0poUHZHZG1BTXZqNmZPQQo3UnRwSTA5QjRVd2FhbGV6ZHpVNG80SU1HakNDREJZd0RnWURWUjBQQVFIL0JBUURBZ2VBTUJNR0ExVWRKUVFNCk1Bb0dDQ3NHQVFVRkJ3TUJNQXdHQTFVZEV3RUIvd1FDTUFBd0hRWURWUjBPQkJZRUZKLzlNdTZnVHM1U1NMUXAKcGxkNmV4b0h2TStCTUI4R0ExVWRJd1FZTUJhQUZONGJIdTE1RmRRK055VERJYnZzTkRsdFFySXdNRmdHQ0NzRwpBUVVGQndFQkJFd3dTakFoQmdnckJnRUZCUWN3QVlZVmFIUjBjRG92TDI4dWNHdHBMbWR2YjJjdmQzSXlNQ1VHCkNDc0dBUVVGQnpBQ2hobG9kSFJ3T2k4dmFTNXdhMmt1WjI5dlp5OTNjakl1WTNKME1JSUo4QVlEVlIwUkJJSUoKNXpDQ0NlT0NEQ291WjI5dloyeGxMbU52YllJV0tpNWhjSEJsYm1kcGJtVXVaMjl2WjJ4bExtTnZiWUlKS2k1aQpaRzR1WkdWMmdoVXFMbTl5YVdkcGJpMTBaWE4wTG1Ka2JpNWtaWGFDRWlvdVkyeHZkV1F1WjI5dloyeGxMbU52CmJZSVlLaTVqY205M1pITnZkWEpqWlM1bmIyOW5iR1V1WTI5dGdoZ3FMbVJoZEdGamIyMXdkWFJsTG1kdmIyZHMKWlM1amIyMkNDeW91WjI5dloyeGxMbU5oZ2dzcUxtZHZiMmRzWlM1amJJSU9LaTVuYjI5bmJHVXVZMjh1YVc2QwpEaW91WjI5dloyeGxMbU52TG1wd2dnNHFMbWR2YjJkc1pTNWpieTUxYTRJUEtpNW5iMjluYkdVdVkyOXRMbUZ5CmdnOHFMbWR2YjJkc1pTNWpiMjB1WVhXQ0R5b3VaMjl2WjJ4bExtTnZiUzVpY29JUEtpNW5iMjluYkdVdVkyOXQKTG1OdmdnOHFMbWR2YjJkc1pTNWpiMjB1YlhpQ0R5b3VaMjl2WjJ4bExtTnZiUzUwY29JUEtpNW5iMjluYkdVdQpZMjl0TG5adWdnc3FMbWR2YjJkc1pTNWtaWUlMS2k1bmIyOW5iR1V1WlhPQ0N5b3VaMjl2WjJ4bExtWnlnZ3NxCkxtZHZiMmRzWlM1b2RZSUxLaTVuYjI5bmJHVXVhWFNDQ3lvdVoyOXZaMnhsTG01c2dnc3FMbWR2YjJkc1pTNXcKYklJTEtpNW5iMjluYkdVdWNIU0NEeW91WjI5dloyeGxZWEJwY3k1amJvSVJLaTVuYjI5bmJHVjJhV1JsYnk1agpiMjJDRENvdVozTjBZWFJwWXk1amJvSVFLaTVuYzNSaGRHbGpMV051TG1OdmJZSVBaMjl2WjJ4bFkyNWhjSEJ6CkxtTnVnaEVxTG1kdmIyZHNaV051WVhCd2N5NWpib0lSWjI5dloyeGxZWEJ3Y3kxamJpNWpiMjJDRXlvdVoyOXYKWjJ4bFlYQndjeTFqYmk1amIyMkNER2RyWldOdVlYQndjeTVqYm9JT0tpNW5hMlZqYm1Gd2NITXVZMjZDRW1kdgpiMmRzWldSdmQyNXNiMkZrY3k1amJvSVVLaTVuYjI5bmJHVmtiM2R1Ykc5aFpITXVZMjZDRUhKbFkyRndkR05vCllTNXVaWFF1WTI2Q0Vpb3VjbVZqWVhCMFkyaGhMbTVsZEM1amJvSVFjbVZqWVhCMFkyaGhMV051TG01bGRJSVMKS2k1eVpXTmhjSFJqYUdFdFkyNHVibVYwZ2d0M2FXUmxkbWx1WlM1amJvSU5LaTUzYVdSbGRtbHVaUzVqYm9JUgpZVzF3Y0hKdmFtVmpkQzV2Y21jdVkyNkNFeW91WVcxd2NISnZhbVZqZEM1dmNtY3VZMjZDRVdGdGNIQnliMnBsClkzUXVibVYwTG1OdWdoTXFMbUZ0Y0hCeWIycGxZM1F1Ym1WMExtTnVnaGRuYjI5bmJHVXRZVzVoYkhsMGFXTnoKTFdOdUxtTnZiWUlaS2k1bmIyOW5iR1V0WVc1aGJIbDBhV056TFdOdUxtTnZiWUlYWjI5dloyeGxZV1J6WlhKMgphV05sY3kxamJpNWpiMjJDR1NvdVoyOXZaMnhsWVdSelpYSjJhV05sY3kxamJpNWpiMjJDRVdkdmIyZHNaWFpoClpITXRZMjR1WTI5dGdoTXFMbWR2YjJkc1pYWmhaSE10WTI0dVkyOXRnaEZuYjI5bmJHVmhjR2x6TFdOdUxtTnYKYllJVEtpNW5iMjluYkdWaGNHbHpMV051TG1OdmJZSVZaMjl2WjJ4bGIzQjBhVzFwZW1VdFkyNHVZMjl0Z2hjcQpMbWR2YjJkc1pXOXdkR2x0YVhwbExXTnVMbU52YllJU1pHOTFZbXhsWTJ4cFkyc3RZMjR1Ym1WMGdoUXFMbVJ2CmRXSnNaV05zYVdOckxXTnVMbTVsZElJWUtpNW1iSE11Wkc5MVlteGxZMnhwWTJzdFkyNHVibVYwZ2hZcUxtY3UKWkc5MVlteGxZMnhwWTJzdFkyNHVibVYwZ2c1a2IzVmliR1ZqYkdsamF5NWpib0lRS2k1a2IzVmliR1ZqYkdsagpheTVqYm9JVUtpNW1iSE11Wkc5MVlteGxZMnhwWTJzdVkyNkNFaW91Wnk1a2IzVmliR1ZqYkdsamF5NWpib0lSClpHRnlkSE5sWVhKamFDMWpiaTV1WlhTQ0V5b3VaR0Z5ZEhObFlYSmphQzFqYmk1dVpYU0NIV2R2YjJkc1pYUnkKWVhabGJHRmtjMlZ5ZG1salpYTXRZMjR1WTI5dGdoOHFMbWR2YjJkc1pYUnlZWFpsYkdGa2MyVnlkbWxqWlhNdApZMjR1WTI5dGdoaG5iMjluYkdWMFlXZHpaWEoyYVdObGN5MWpiaTVqYjIyQ0dpb3VaMjl2WjJ4bGRHRm5jMlZ5CmRtbGpaWE10WTI0dVkyOXRnaGRuYjI5bmJHVjBZV2R0WVc1aFoyVnlMV051TG1OdmJZSVpLaTVuYjI5bmJHVjAKWVdkdFlXNWhaMlZ5TFdOdUxtTnZiWUlZWjI5dloyeGxjM2x1WkdsallYUnBiMjR0WTI0dVkyOXRnaG9xTG1kdgpiMmRzWlhONWJtUnBZMkYwYVc5dUxXTnVMbU52YllJa0tpNXpZV1psWm5KaGJXVXVaMjl2WjJ4bGMzbHVaR2xqCllYUnBiMjR0WTI0dVkyOXRnaFpoY0hBdGJXVmhjM1Z5WlcxbGJuUXRZMjR1WTI5dGdoZ3FMbUZ3Y0MxdFpXRnoKZFhKbGJXVnVkQzFqYmk1amIyMkNDMmQyZERFdFkyNHVZMjl0Z2cwcUxtZDJkREV0WTI0dVkyOXRnZ3RuZG5ReQpMV051TG1OdmJZSU5LaTVuZG5ReUxXTnVMbU52YllJTE1tMWtiaTFqYmk1dVpYU0NEU291TW0xa2JpMWpiaTV1ClpYU0NGR2R2YjJkc1pXWnNhV2RvZEhNdFkyNHVibVYwZ2hZcUxtZHZiMmRzWldac2FXZG9kSE10WTI0dWJtVjAKZ2d4aFpHMXZZaTFqYmk1amIyMkNEaW91WVdSdGIySXRZMjR1WTI5dGdoUm5iMjluYkdWellXNWtZbTk0TFdOdQpMbU52YllJV0tpNW5iMjluYkdWellXNWtZbTk0TFdOdUxtTnZiWUllS2k1ellXWmxiblZ3TG1kdmIyZHNaWE5oCmJtUmliM2d0WTI0dVkyOXRnZzBxTG1kemRHRjBhV011WTI5dGdoUXFMbTFsZEhKcFl5NW5jM1JoZEdsakxtTnYKYllJS0tpNW5kblF4TG1OdmJZSVJLaTVuWTNCalpHNHVaM1owTVM1amIyMkNDaW91WjNaME1pNWpiMjJDRGlvdQpaMk53TG1kMmRESXVZMjl0Z2hBcUxuVnliQzVuYjI5bmJHVXVZMjl0Z2hZcUxubHZkWFIxWW1VdGJtOWpiMjlyCmFXVXVZMjl0Z2dzcUxubDBhVzFuTG1OdmJZSUtZV2t1WVc1a2NtOXBaSUlMWVc1a2NtOXBaQzVqYjIyQ0RTb3UKWVc1a2NtOXBaQzVqYjIyQ0V5b3VabXhoYzJndVlXNWtjbTlwWkM1amIyMkNCR2N1WTI2Q0Jpb3VaeTVqYm9JRQpaeTVqYjRJR0tpNW5MbU52Z2dabmIyOHVaMnlDQ25kM2R5NW5iMjh1WjJ5Q0ZHZHZiMmRzWlMxaGJtRnNlWFJwClkzTXVZMjl0Z2hZcUxtZHZiMmRzWlMxaGJtRnNlWFJwWTNNdVkyOXRnZ3BuYjI5bmJHVXVZMjl0Z2hKbmIyOW4KYkdWamIyMXRaWEpqWlM1amIyMkNGQ291WjI5dloyeGxZMjl0YldWeVkyVXVZMjl0Z2doblozQm9kQzVqYm9JSwpLaTVuWjNCb2RDNWpib0lLZFhKamFHbHVMbU52YllJTUtpNTFjbU5vYVc0dVkyOXRnZ2g1YjNWMGRTNWlaWUlMCmVXOTFkSFZpWlM1amIyMkNEU291ZVc5MWRIVmlaUzVqYjIyQ0VXMTFjMmxqTG5sdmRYUjFZbVV1WTI5dGdoTXEKTG0xMWMybGpMbmx2ZFhSMVltVXVZMjl0Z2hSNWIzVjBkV0psWldSMVkyRjBhVzl1TG1OdmJZSVdLaTU1YjNWMApkV0psWldSMVkyRjBhVzl1TG1OdmJZSVBlVzkxZEhWaVpXdHBaSE11WTI5dGdoRXFMbmx2ZFhSMVltVnJhV1J6CkxtTnZiWUlGZVhRdVltV0NCeW91ZVhRdVltV0NHbUZ1WkhKdmFXUXVZMnhwWlc1MGN5NW5iMjluYkdVdVkyOXQKZ2hNcUxtRnVaSEp2YVdRdVoyOXZaMnhsTG1OdWdoSXFMbU5vY205dFpTNW5iMjluYkdVdVkyNkNGaW91WkdWMgpaV3h2Y0dWeWN5NW5iMjluYkdVdVkyNkNGU291WVdsemRIVmthVzh1WjI5dloyeGxMbU52YlRBVEJnTlZIU0FFCkREQUtNQWdHQm1lQkRBRUNBVEEyQmdOVkhSOEVMekF0TUN1Z0thQW5oaVZvZEhSd09pOHZZeTV3YTJrdVoyOXYKWnk5M2NqSXZOelZ5TkZwNVFUTjJRVEF1WTNKc01JSUJCQVlLS3dZQkJBSFdlUUlFQWdTQjlRU0I4Z0R3QUhZQQpFdkZPTkwxVGNreUVCaG5Eano5NkUvam50V0tIaUp4dE1BV0U2K1dHSmpvQUFBR1hMLzhMU3dBQUJBTUFSekJGCkFpRUF0STkwb3NjanRHdGx0TFErNngvTWxXWXQrR1JVQjczWTBRNTFTcmJkWTBvQ0lHSkZRMUU0WnNQcURlcUgKTDFuVVRIL3ZYeXhTRWpNSW5DekNUcGU3eXNsU0FIWUFmVmtlRXVGNEtuc2NZV2Q4WHYzNDBJZGNGS0JPbFo2NQpBeS9aRG93dWViZ0FBQUdYTC84UFdRQUFCQU1BUnpCRkFpQjJ1a2VnUnpvQ3N4QW5FMERFaURZSURPLzQxUE5GCmlyUUQyT1RWcGVRQ29BSWhBTHRTclc0b1djaFJqai9mZFBzM2R6RXpRbU1zV05jREtzdTEwSnpUOUpaVE1BMEcKQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUFzcWxCNUIvdkcvSGNGZ2ozWVZHclJNTmtvNW1mb2k3akhHM2RWT0E0ZApkbzVBa1dUQ1pBdVIrT0ZnNWVIQS9NUEF0NWh3NzdXRi9GZmxuYnhsYS9yT2QwNFVLVmJHdVA5QTYyZEVMcW5ZCkJZd0ZPR1dYZTRJY1V3Y1pYV1o1S3RUVTZxVitKNjk5NkxQYVFXMmVaeHIzQ2FBUkhRbHM3U3REeExMVHFxUHgKL2k0cXhHeTZGQVN2UytXdVQrc2pab2ZKZlg4VFV0K245Yk51Mi9xNlhNWFFkb2NXUkxuNktsaHlmWVB0anJSMwoxeTlMamdmOEkvWkcxNFYxSVZvRFdOdFo3eHM3RGdSRW13Zy9zZERpVWYrSkFINllPWm1SSHFxNFdLY1dCcVFDCnVFMVk4elBqK1BlbWhYVTJqd3BRQUEzS3NxaUMxaGQ2N1lVeFRFS2JIZkd1Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K