Cita:
Iniciado por mind_2009 Estoy desencriptando un PINBLOCK eb 3DES , y el programa me pide 2 llaves , tengo una llave 32caract hexadecimal y otra 48digitos enteros .
Mi pregunta es como puedo convertir estos 48digitos a 32hexadecimal ????
mmm... yo mucho de conversión de números no manejo, pero veamos que queda aun en mi memoria...
Para pasar un número dec a hex tenés que dividirlo sucesivamente por 16 e ir guardando el resto. Luego el número serán los restos ordenados desde el último que obtuviste hasta el primero.
Por ejemplo para pasar de 1531 dec a hex
1531 / 16 = 95 (resto: 11 -> B)
95 / 16 = 5 (resto: 15 -> F)
5/16 = 0 (resto: 5)
De modo que el número sería:
5FB [hex]
que sería lo mismo a:
5 x 16^2 + 15 x 16^1 + 11
Viendo esto notamos que la cantidad de dígitos surge de la cantidad de divisiones por 16 que se le realizan al número decimal.
Para hacerlo numericamente tenemos:
D[h] = Ceiling(log(N[d]) / log(16))
Donde:
D[h] = Cantidad de dígitos del número hexadecimal.
N[d] = Número decimal.
Ceiling = Redondeo al número entero mayor
En nuestro caso:
D[h] = Ceiling(log(1531) / log(16))
D[h] = Ceiling(2.64...)
D[h] = 3
Para el caso que vos planteás al ser un número decimal de 48 dígitos el logaritmo de ese número estará en un entorno [47, 48). Tomemos el caso más favorable que sería 47
log(N[d]) = 47
D[h] = Ceiling(47 / log(16))
D[h] = Ceiling(39.03...)
D[h] = 40
Esto significa que para transformar un número decimal de 48 dígitos (suponiendo que los dígitos a la izquierda son no nulos. Es decir que 00062 son 2 dígitos y no 5) a hexadecimal
necesitarías por lo menos 40 dígitos hexadecimales.
Si tu caso SI se consideran los 0 delante del número entonces la forma de pasar de un valor dec a un hex está planteada... De todos modos si buscás en inet SEGURO que vas a encontrar funciones ya hechas para casi cualquier lenguaje de programación.
Saludos.
PD: Por las dudas chequeá lo que escribí y NO lo tomes como palabra santa, ya que mis conocimientos de pasajes numéricos están bastante oxidados.