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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  hex a string pero rapido, es posible?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: hex a string pero rapido, es posible?  (Leído 918 veces)
Fucko

Desconectado Desconectado

Mensajes: 222


Fucko the Clown Rules!!!


Ver Perfil WWW
hex a string pero rapido, es posible?
« en: 22 Julio 2022, 05:04 am »

Hola, estoy intentando hacer hex to string, leyendo un fichero desde disco, pero el inconveniente, es que tarda muchisimo... funciona bien, pero tarda una eternidad, en un archivo de 3 megas por ejemplo....
el code es este:

Código:
Public Function HexToString(ByVal HexToStr As String) As String
   Dim strTemp   As String
   Dim strReturn As String
   Dim I         As Long
    For I = 1 To Len(HexToStr) Step 2
        strTemp = Chr$(Val("&H" & Mid$(HexToStr, I, 2)))
        strReturn = strReturn & strTemp
    Next I
    HexToString = strReturn
End Function

Public Function ReadFileIntoString(strFilePath As String) As String

    Dim fso As New FileSystemObject
    Dim ts As TextStream

    Set ts = fso.OpenTextFile(strFilePath)
    ReadFileIntoString = ts.ReadAll

End Function










funcionar, funciona, pero tarda una eternidad....

el soft cyberchef (https://gchq.github.io/CyberChef/)

la misma funcion, que sería "from hex" hace lo mismo y tarda 2 segundos en hacerlo...
alguna idea que se puede mejorar?
gracias

saludos




« Última modificación: 22 Julio 2022, 20:54 pm por Fucko » En línea

Cree en los que buscan la verdad, duda de los que la han encontrado...
EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 1.916



Ver Perfil
Re: hex a string pero rapido, es posible?
« Respuesta #1 en: 22 Julio 2022, 17:22 pm »

Debe ser porque estas leyendo todo de una, tienes que hacerlo de dos en dos caracteres hexadecimales, luego convertirlos al caracter de texto que representan y escribirlo en el archivo de salida, por ejemplo:

Código
  1.  Sub Main()
  2.    Dim sr As New System.IO.StreamReader("hex.txt")
  3.    Dim sw As New System.IO.StreamWriter("txt.txt")
  4.    Dim hex(2) As Char
  5.    While sr.Read(hex, 0, 2)
  6.      sw.Write(Chr(Val("&H" & hex)))
  7.    End While
  8.    sr.Close()
  9.    sw.Close()
  10.  End Sub


En línea

Fucko

Desconectado Desconectado

Mensajes: 222


Fucko the Clown Rules!!!


Ver Perfil WWW
Re: hex a string pero rapido, es posible?
« Respuesta #2 en: 22 Julio 2022, 20:51 pm »

Hola, ese code es para vb6?

el code que puse, creo que eso hace, lee de 2 en 2 y los transforma, pero tarda eternidad en ficheros grandes.

el soft cyberchef, hace exactamente lo mismo, pero tarda 2 segundos en hacerlo.
no creo que los lea de 2 en 2, sino tardaría lo mismo...

no lo sé, intentaré contactar al autor.

voy a intentar ver ese code, aunque se me hace que es .net :D

gracias


EDIT:

este es el code del cyberchef

que hace lo mismo que intento en mi code, pero en menos de 2 segundos

https://github.com/gchq/CyberChef/blob/master/src/core/operations/FromHex.mjs
« Última modificación: 22 Julio 2022, 20:59 pm por Fucko » En línea

Cree en los que buscan la verdad, duda de los que la han encontrado...
EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 1.916



Ver Perfil
Re: hex a string pero rapido, es posible?
« Respuesta #3 en: 23 Julio 2022, 03:41 am »

Nop, es .Net, pero en VB6 es todavía más fácil, para este caso debería bastar Input y Print

Código
  1. Private Sub Command1_Click()
  2.  Open "hex.txt" For Input As #1
  3.  Open "txt.txt" For Output As #2
  4.  Do While Not EOF(1)
  5.    Print #2, Chr(Val("&H" & Input(2, #1)));
  6.  Loop
  7.  Close #1
  8.  Close #2
  9. End Sub

Como ya te comenté, el problema que tienes es que estás cargando tooodo el contenido del archivo a la vez (ReadFileIntoString = ts.ReadAll)

Si quieres usar los TextStream como en tu código:

Código
  1. Private Sub Command1_Click()
  2.  Dim strFileInputPath As String
  3.  Dim strFileOutputPath As String
  4.  strFileInputPath = "hex.txt"
  5.  strFileOutputPath = "txt.txt"
  6.  
  7.  Set fso = CreateObject("Scripting.FileSystemObject")
  8.  Set tsi = fso.OpenTextFile(strFileInputPath)
  9.  Set tso = fso.CreateTextFile(strFileOutputPath)
  10.  
  11.  Dim strHex As String
  12.  Dim strTex As String
  13.  Do While Not tsi.AtEndOfStream
  14.    strHex = tsi.Read(2)
  15.    strTex = Chr(Val("&H" & strHex))
  16.    tso.write strTex
  17.  Loop
  18.  
  19.  tsi.Close
  20.  tso.Close
  21. End Sub

La idea es siempre tomar de dos en dos los caracteres y nunca todos a la vez, si los tomas todos a la vez y luego de ahí los tomas de dos no vale porque ya has sobrecargado al programa previamente.
En línea

Fucko

Desconectado Desconectado

Mensajes: 222


Fucko the Clown Rules!!!


Ver Perfil WWW
Re: hex a string pero rapido, es posible?
« Respuesta #4 en: 24 Julio 2022, 00:16 am »

Muchas gracias!!!

la velocidad ahora es como el soft cyberchef, con el primer ejemplo de code

tarda 2 segundos...

solo que me da error, que ahora estoy de salida, pero lo veré al volver....

error 62
la entrada de datos ha sobrepasado el final del archivo

Código:
Print #2, Chr(Val("&H" & Input(2, #1)));
y los primero bytes, los da en 00

pero como digo, con un poco de filtro quedará bien :) (EDIT: On error resume next sirvió para el primer error, ambos codes generan mismo archivo, solo que como dije, el primero tarda 2 segundos, el segundo entre 20 y 30)


el segundo code, también funciona, solo que toma más tiempo, en el mismo archivo, tomará unos 30 segundos... y no arroja error

el code que yo estaba usando anteriormente, tardaba más de 1 hora y no se hasta donde, porque lo corté... pero 1 hora ha llegado a estar

luego con un poco más de tiempo lo reviso

nuevamente, muchisimas gracias!!!
« Última modificación: 24 Julio 2022, 00:35 am por Fucko » En línea

Cree en los que buscan la verdad, duda de los que la han encontrado...
Fucko

Desconectado Desconectado

Mensajes: 222


Fucko the Clown Rules!!!


Ver Perfil WWW
Re: hex a string pero rapido, es posible?
« Respuesta #5 en: 25 Agosto 2022, 22:37 pm »

Buenas, como va? aquí de nuevo, la verdad, me da pena volver a preguntar, con la tremenda ayuda que me han dado...
estoy teniendo problemas con la conversión, el code tiene problemas para convertir, o eso parece.
adjunto fotos de como se debería ver y quedar, y como me queda a mi....
texto a convertir:



En vista hexadecimal, tiene otros caracteres, antes del texto plano, que son los que hacen el problema



la salida correcta que me da el cyberchef y funciona, es:




y el code, a mi me genera esto:



si en el texto, yo borro a "EF BB BF" el codigo funciona...
al perecer, todos los txt que se necesitan convertir, tienen eso antes del texto plano...

como podría solucionar ese problema?

el code usado es:

Código:
Private Sub Command1_Click()
  Open "hex.txt" For Input As #1
  Open "txt.txt" For Output As #2
  Do While Not EOF(1)
    Print #2, Chr(Val("&H" & Input(2, #1)));
  Loop
  Close #1
  Close #2
End Sub

muchisimas gracias y perdon :/
« Última modificación: 25 Agosto 2022, 23:10 pm por Fucko » En línea

Cree en los que buscan la verdad, duda de los que la han encontrado...
EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 1.916



Ver Perfil
Re: hex a string pero rapido, es posible?
« Respuesta #6 en: 26 Agosto 2022, 03:52 am »

EF BB BF es para identificar a un archivo bajo la codificación UTF-8 con BOM, justo esos tres bytes son las constantes del BOM o Signature. Un lector de texto debería ser capaz de leer esos  tres bytes para entender de que el archivo viene codificado con UTF-8, luego obviar ese BOM y mostrar el contenido del archivo como se debe.

Esos 3 bytes están causando el problema, la manera más sencilla sería tomar los 3 primeros bytes ("caracteres") y compararlos con la constante del BOM EF BB BF, si no es igual entonces significa que no tiene BOM y devolvemos el cursor de lectura al inicio:

Código
  1. Private Sub btn_Hex2Text_InOut_Click()
  2.  Open "hex.txt" For Input As #1
  3.  Open "txt.txt" For Output As #2
  4.  If Input(3, #1) <> Chr(&HEF) & Chr(&HBB) & Chr(&HBF) Then Seek #1, 1
  5.  Do While Not EOF(1)
  6.    Print #2, Chr(Val("&H" & Input(2, #1)));
  7.  Loop
  8.  Close #1
  9.  Close #2
  10. End Sub
« Última modificación: 26 Agosto 2022, 09:17 am por EdePC » En línea

Fucko

Desconectado Desconectado

Mensajes: 222


Fucko the Clown Rules!!!


Ver Perfil WWW
Re: hex a string pero rapido, es posible?
« Respuesta #7 en: 26 Agosto 2022, 20:32 pm »

Muchisimas gracias!!
anoche, ví el msj y era otro, y no lo había guardado, porque era madrugada aca ejjeje

yo no sabía como hacer el filtro, porque si ponía que buscara en el input, por algunos de esos bytes, y me los cambiara por otro valor conocido y funcional, eso me lo iba a hacer en todo el input, y yo solo necesitaba los 3 primeros bytes nomás comparar...
me has salvado!!!
estoy muy agradecido...
me gustaría invitarte una coca, cerveza, café o lo que sea, tenes alguna manera de que te haga llegar una colaboración?
En línea

Cree en los que buscan la verdad, duda de los que la han encontrado...
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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