kali encoded convert b64 bash shell sed base64

bash - encoded - encoding b64



¿Cómo pasar contenido ecoded base64 a sed? (4)

La variable XFILEBASE64 tiene contenido codificado en base64 y deseo reemplazar algunas cadenas con ese contenido base64.

Efectivamente, base64 está lleno de caracteres especiales, y he intentado con $ ''/ 001'' como delimitador, obteniendo el mensaje de error. ¿Alguna sugerencia?

XFILEBASE64=`cat ./sample.xml | base64` cat ./template.xml | sed "s$''/001''<Doc>###%DOCDATA%###<//Doc>$''/001''<Doc>${XFILEBASE64}<//Doc>$''/001''g" > sed: -e expression #1, char 256: unterminated `s'' command

EDITAR: Parece que el problema no tiene nada que ver con sed, debe estar oculto en las operaciones de base64.

sample.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <a>testsdfasdfasdfasfasdfdasfdads</a>

Para reproducir el problema:

foo=`base64 ./sample.xml` echo $foo | base64 --decode <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <base64: invalid input


Base64 tiene solo tres caracteres especiales ( wikipedia ), normalmente + , / y = . Puedes usar por ejemplo @ , , & o sin problema


El comando

sed "s$''/001''<Doc>###%DOCDATA%###<//Doc>$''/001''<Doc>${XFILEBASE64}<//Doc>$''/001''g"

debe escribirse como

sed s$''/001''"<Doc>###%DOCDATA%###<//Doc>"$''/001''"<Doc>${XFILEBASE64}<//Doc>"$''/001''g

Es decir, $''...'' entre comillas dobles no son especiales.


El problema estaba en la codificación base64, la opción -w 0 de base64 hizo el truco.

cat ./sample.xml | base64 -w 0


Tempo64="$( echo "${XFILEBASE64}" | sed ''s/[//&*./+!]///&/g'' )" sed "s!<Doc>###%DOCDATA%###</Doc>!<Doc>${Tempo64}</Doc>!g" ./template.xml

  • debería funcionar y posix obediente