Underc0de

Programación Scripting => Python => Mensaje iniciado por: blozzter en Julio 10, 2011, 02:38:23 PM

Título: Pasar un texto a MD5 o a hexadecimal
Publicado por: blozzter en Julio 10, 2011, 02:38:23 PM
últimamente he estado utilizando mucho la conversión a código hexadecimal, así que escribí un programa que facilitara la tarea para no tener que estar ingresando a webs que hacen el trabajo. y para hacerlo más atractivo le incluí además la encriptación en md5.

estoy recién empezando en esto, así que criticas y sugerencias me vendrían bien.

ah, me olvidaba, estoy con el interprete de python 2.7 y 2.3. con estos me funciona, con versiones superiores creo que da problemas.


Código (python) [Seleccionar]
# convertir un texto a MD5
# o a hexadecimal
# uso:
# python text-tool.py  -type  md5/hex  -text  texto-a-convertir
# > blozzter

import sys, md5

def convert_md5(text):
    encriptado = md5.new()
    encriptado.update(text)
    return encriptado.hexdigest()

def convert_hex(texto):
long = len(texto)
temp = ''

for i in range(long):
  temp += hex(ord(texto[i])) #convertimos a ascii y luego a hexadecimal

hexadecimal = ''

for i in range(len(temp) - 1): #limpiamos la cadena quitandole los '0x'
  if temp[i] == '0' and temp[i + 1] == 'x':
hexadecimal += temp[i + 2]
hexadecimal += temp[i + 3]
return hexadecimal


if (len(sys.argv) - 1) != 4:  #me aseguro que hayan sido 4 los argumentos entregados
print '> Error en la cantidad de parametros'
sys.exit()


for arg in range(len(sys.argv) - 1):
try:
if sys.argv[arg + 1] == '-type':
tipo = sys.argv[arg + 2]

if sys.argv[arg + 1] == '-text':
texto = sys.argv[arg + 2]

except:
print '> Error en los parametros\n'
print 'python text-tool.py  -type  md5/hex  -text  texto-a-convertir\n'
sys.exit()

try:
if tipo == 'md5':
en_md5 = convert_md5(texto)
print '> ', en_md5

if tipo == 'hex':
en_hex = convert_hex(texto)
print '> ', en_hex

except:
print '> Error en los parametros\n'
print 'python text-tool.py  -type  md5/hex  -text  texto-a-convertir\n'




demostraciones:

C:\herramientas>python text-tool.py -type hex -text undercode
>  756e646572636f6465



C:\herramientas>python text-tool.py -type md5 -text undercode
>  c7b5dc22ebc8e1d8f069ee1f2d340d57

Título: Re:pasar un texto a MD5 o a hexadecimal
Publicado por: Mavis en Julio 10, 2011, 05:14:26 PM
Con versiones 3x dará problemas, ya que la sintaxis es incorrecta.

El código podemos decir que está bien, solo te falta respetar el ordenamiento de Python (abajo hacia arriba) y aprender a dejar el código limpio, ya que es una de las características más importantes del lenguaje.

Te reto a que sigas practicando, y espero ver mejoras de este código.

Saludos!
Título: Re:pasar un texto a MD5 o a hexadecimal
Publicado por: blozzter en Julio 10, 2011, 07:45:47 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Con versiones 3x dará problemas, ya que la sintaxis es incorrecta.

El código podemos decir que está bien, solo te falta respetar el ordenamiento de Python (abajo hacia arriba) y aprender a dejar el código limpio, ya que es una de las características más importantes del lenguaje.

Te reto a que sigas practicando, y espero ver mejoras de este código.

Saludos!

Disculpa, pero no comprendo que es lo que quieres decir con lo del 'ordenamiento' ni tampoco que parte(s) del código te parecen sucios.


saludos.
Título: Re:pasar un texto a MD5 o a hexadecimal
Publicado por: JaAViEr en Julio 12, 2011, 10:16:35 PM
CREO que con int("a",16) Puedes hacer lo mismo para pasar a HEX(base16)
Título: Re:pasar un texto a MD5 o a hexadecimal
Publicado por: blozzter en Julio 13, 2011, 04:04:56 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
CREO que con int("a",16) Puedes hacer lo mismo para pasar a HEX(base16)

JaAViEr, creo que en C es posible hacer algo como lo que dices tú.

si lo hago en python me sale esto:

>>> int("a", 16)
10


lo cual está mal, porque a la 'a' en hexadecimal le corresponde el valor 61 y no 10. lo cual me lleva a pensar que se puede hacer algo como esto:

>>> int('a', 16) + 51
61

>>> int('e', 16) + 51
65


pero ese método funciona solo hasta la letra 'f', con la 'g' ya da error  ::)


saludos =)