elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Ayuda - Leer Caracter por Caracter
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda - Leer Caracter por Caracter  (Leído 2,664 veces)
SpesMod

Desconectado Desconectado

Mensajes: 83


-reflejo-


Ver Perfil
Ayuda - Leer Caracter por Caracter
« en: 2 Febrero 2014, 18:19 »

Buenas, ando practicando esta programacion y la verdad se me anda complicando un poquito, vengo de C/C++ y lo que les voy a consultar ahora es un chancay de a 20 en C/C++ pero aqui en Bat se me hace dificil; bueno ahi va:

Resulta que quiero hacer un bat que lea un archivo *.txt caracter por caracter y a medida que lee los caracteres los vaya guardando en otro archivo pero con el valor ascii alterado sumandole 5, por ejemplo:

Tengo el archivo FUENTE.TXT cuyo contenido es "hola"; el bat deberia hacer:

lee "h", le suma 5 obteniendo "m" y guarda "m" en un nuevo archivo por ejemplo RESULTADO.TXT
lee el siguiente caracter "o", le suma 5 obteniendo "t" y añade "t" en RESULTADO.TXT
lee el siguiente caracter "l", le suma 5 obteniendo "q" y añade "q" en RESULTADO.TXT
lee el siguiente caracter "a", le suma 5 obteniendo "f" y añade "f" en RESULTADO.TXT

El resultado serian 2 archivos:

FUENTE.TXT cuyo contenido seria "hola"
RESULTADO.TXT cuyo contenido seria "mtqf" que en realidad es "hola" pero sumandole 5 posiciones ascii a cada uno de los caracteres.

Creo haberme explicado bien y en realidad se que mi problema es muy sencillo para ustedes, en C/C++ esto lo podria hacer en menos de 5 lineas, pero aqui no me sale; asi que espero que me puedan ayudar.
gracias de antemano :) ;D


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Ayuda - Leer Caracter por Caracter
« Respuesta #1 en: 2 Febrero 2014, 19:08 »

es un chancay de a 20 en C/C++ pero aqui en Bat se me hace dificil

Claro, Batch no dispone prácticamente de NADA util ni muhco menos de métodos/comandos para manejar ASCII o HEX para rotar caracteres (aunque se pueden improvisar cosas con el viejo truco del Exit Code).

¿Y si utilizas VBS (que lo puedes ejecutar como si se tratase de un archivo Bat) para escribir tu método de cifrado Caesar?:

Código
  1. WScript.Echo Caesar("hola",5)
  2.  
  3. Function Caesar(str,rotation)
  4.  
  5. Dim length,char,i
  6. Caesar = ""
  7. length = Len(str)
  8. For i = 1 To length
  9. char = Mid(str,i,1)
  10. If char >= "A" And char <= "Z" Then
  11. char = Asc("A") + (Asc(char) - Asc("A") + rotation) Mod 26
  12. Caesar = Caesar & Chr(char)
  13. ElseIf char >= "a" And char <= "z" Then
  14. char = Asc("a") + (Asc(char) - Asc("a") + rotation) Mod 26
  15. Caesar = Caesar & Chr(char)
  16. Else
  17. Caesar = Caesar & char
  18. End If
  19. Next
  20.  
  21. End Function

Saludos


« Última modificación: 2 Febrero 2014, 19:10 por Eleкtro » En línea


SpesMod

Desconectado Desconectado

Mensajes: 83


-reflejo-


Ver Perfil
Re: Ayuda - Leer Caracter por Caracter
« Respuesta #2 en: 2 Febrero 2014, 19:34 »

Hola, un gusto y gracias por responder tan pronto; en tu solucion el argumento está predefinido, como archivo VBS tendria que pasarle el archivo txt como argumento variable, no siempre va a contener lo mismo, ademas quisiera tambien poder enviarle el numero 5 como argumento.
Este VBS lo tendría que ejecutar con CALL desde otro bat verdad?, como lo ejecuto y le mando estos parametros (archivo y 5) para que los procese?
Gracias!
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Ayuda - Leer Caracter por Caracter
« Respuesta #3 en: 3 Febrero 2014, 07:03 »

como lo ejecuto y le mando estos parametros (archivo y 5) para que los procese?

No te lo tomes a mal pero para venir de un lenguaje como C/C++ te veo bastante perezoso para Googlear información básica (el manejo de argumentos en X lenguaje) :¬¬ ~> http://ss64.com/vb/arguments.html

Entonces deberías reemplazar esta orden:
Citar
Código
  1. WScript.Echo Caesar("hola",5)

Por esta otra:
Código
  1. WScript.StdOut.Write(Caesar(WScript.Arguments(0), WScript.Arguments(1)))

Para llamar al Script y redireccionar la salida del Script a un archivo de texto puedes hacerlo así:
Código
  1. Cscript.exe //NoLogo "Caesar.vbs" "hola" 5 > "RESULTADO.TXT"

Como viste en el ejemplo uso un string como parámetro y no un archivo de texto "fuente.txt", la razón es que usar archivos de texto en mi opinión es primitivo, estoy convencido de que podrías trabajar diréctamente con Strings sin necesidad de crear/manipular archivos secundarios en el HDD, de todas formas te muestro los cambios que deberías hacer al Script VBS para tomar un archivo de texto como primer argumento:

Código
  1. ' Cojo la primera linea del archivo que le pases como argumento.
  2. str = Split(CreateObject("Scripting.FileSystemObject"). _
  3. OpenTextFile(WScript.Arguments(0), 1).ReadAll(), vbnewline)(0)
  4.  
  5. WScript.StdOut.Write(Caesar(str, WScript.Arguments(1)))

En la consola...:
Código
  1. Cscript.exe //NoLogo "Caesar.vbs" "FUENTE.TXT" 5 > "RESULTADO.TXT"

Saludos!
« Última modificación: 3 Febrero 2014, 07:09 por Eleкtro » En línea


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines