cifrar campo numérico en un archivo de texto

Iniciado por eolh652, 27 Agosto 2013, 18:46 PM

0 Miembros y 1 Visitante están viendo este tema.

eolh652

Buen Día.

Antes que nada saludos a todos los miembros de este foro, espero puedan ayudarme con la siguente duda.

Tengo la labor de enmascarar/cifrar un campo en específico de un archivo de texto, por ejemplo resp_260813.log.

El archivo esta dividido en campos cuyo divisor es |. El campo que yo quiero cifrar es el 5. Por ejemplo

rdshj|fdkldlk|hfdhrh|994jd|4986830|fjfj|fdporei546|49459.

Yo unicamente quiero manipular(cifrar) el campo 5 cuyo contenido es 4986830.

Con awk ya pude imprimir ese campo con la instrucción awk 'BEGIN {FS="|"}; {print $5}' resp_260813.log.

Pero lo que quiero es que todo el archivo siga igual excepto ese campo, debido a que ese archivo se enviara por la red y ese campo no debe ser visible.

Espero puedan ayudarme a resolver este problema con el archivo mostrado, seguire trabajando en eso.

Muchas gracias, saludos a todos

Almapa

Pero puede ser en cualquier lenguaje de scripting? El awk no lo he utilizado nunca...

eolh652

Saludos.

Muchas gracias por responder. Pues no necesariamente en awk, puede ser cualquier otro lenguaje de scripting(shell, perl, python).

Sigo investigando pero aun no queda la solución

Gracias

Danyfirex

Puedes hacer algo así.


Código (python) [Seleccionar]
def rc4crypt(data, key):
    x = 0
    box = range(256)
    for i in range(256):
        x = (x + box[i] + ord(key[i % len(key)])) % 256
        box[i], box[x] = box[x], box[i]
    x = 0
    y = 0
    out = []
    for char in data:
        x = (x + 1) % 256
        y = (y + box[x]) % 256
        box[x], box[y] = box[y], box[x]
        out.append(chr(ord(char) ^ box[(box[x] + box[y]) % 256]))
   
    return ''.join(out)


f = open('Oiginal.txt', "r")
lines = f.readlines()
f.close()


f = open('Cifrado.txt', "w")
for line in lines:
    print line
   
    split=line.split("|")
    print split[4]
    line=line.replace(split[4],rc4crypt(split[4],"Hola"))
    print line
    f.write(line)
f.close()




saludos


Almapa

#4
En batch podrías hacer algo parecido a esto:
@echo off

set var="rdshj|fdkldlk|hfdhrh|994jd|4986830|fjfj|fdporei546|49459"
set /p elemento=Posición del elemento a codificar

for /f "tokens=%elemento% delims=|" %%a in (%var%) do (call :cambio %%a)

:cambio
call set var=%%var:%1=eolh652%%
echo %var%
pause
exit