Página 1 de 1

De Hexadecimal a Radix-24

Publicado: 02 Oct 2013 04:09
por sarumanice
Hola, necesito convertir un codigo de "Hexadecimal" como este; "01473AD2A1F8EA868721D26A1E4846" a Radix-24 , yo ya lo converti con el software Haxial Calculator, pero quisiera hacerlo en ams, ya que es parte de un proyecto...y aunque busco por internet, la explicación que más se hacerla a las operaciones necesarias que se tiene que realizar para obtener dicho resultado es Wikipedia (http://es.wikipedia.org/wiki/Base64), y aun así no me queda claro...,

Yo tengo en Hexadeciaml esto; "01473AD2A1F8EA868721D26A1E4846"
al combertirlo en Radix-24, obtengo esto: "4NA7HHH7DKC3F1BDIGN8H1106",...


Pero como?, que hago?, multiplico, divido, sumo raiz?, potenciación.. le pongo una bomba nuclear?, que hago para que me de esto? xDDD

Estoy tratando de descondicar un codigo Hash de una llave del regedit de un software de Windows, manualmente ya lo hice, pero cuando trato de crear el software en AMS con todas los pasos automaticos, me estanco en esa parte :( .... podrian ayudarme porfavor,

Muchas Gracias por leer mi hilo, y saludos a todos! :D, he vuelto al foro con ganas de aportar :friends:

Publicado: 02 Oct 2013 07:38
por Pabloko
hexadecimal por defecto usa base-16, para explicarlo facil, esto quiere decir que puedes usar del 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F Un conjunto de 16 caracteres como puedes ver.

Con base 24 dispondras de 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N Con lo que tu compresion de datos aqui es mayor.

Googleando en el segundo resultado encontre esto:
local floor,insert = math.floor, table.insert
function basen(n,b)
    n = floor(n)
    if not b or b == 10 then return tostring(n) end
    local digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    local t = {}
    local sign = ""
    if n < 0 then
        sign = "-"
    n = -n
    end
    repeat
        local d = (n % b) + 1
        n = floor(n / b)
        insert(t, 1, digits:sub(d,d))
    until n == 0
    return sign .. table.concat(t,"")
end
Creo que podrias usar una funcion que no recuerdo como se llama pero convierte un caracter en su equivalente numerico, llamemosle Char.Tonumber("a")= 97 dec = 61 hex, = 41 hex base^24

basen(Char.Tonumber("a"),24))=41

o por lo menos deberia ser.

Puedes hacer pruebas aqui:

http://www.sooeet.com/math/base-converter.php

Tambien puedes crear tu propia funcion con algo parecido a:
function DEC_HEX(IN)
    local B,K,OUT,I,D=16,"0123456789ABCDEF","",0
    while IN>0 do
        I=I+1
        IN,D=math.floor(IN/B),math.mod(IN,B)+1
        OUT=string.sub(K,D,D)..OUT
    end
    return OUT
end
function DEC_HEX_24(IN)
    local B,K,OUT,I,D=24,"0123456789ABCDEFGHIJKLMN","",0
    while IN>0 do
        I=I+1
        IN,D=math.floor(IN/B),math.mod(IN,B)+1
        OUT=string.sub(K,D,D)..OUT
    end
    return OUT
end

Re: De Hexadecimal a Radix-24

Publicado: 02 Oct 2013 09:01
por sarumanice
gracias por el abenton pabloko, con la info que me diste, en especialmente el enlace para las pruebas pues me puse a aplicarlo en el AMS despues de haber leido el inglesha que esta ahi :) y comenze con este pobre filtro :sorry:
key2 = Input.GetText("key2");
cambia1 = String.Replace(key2, "A", "10", true);
cambia2 = String.Replace(cambia1, "B", "11", false);
cambia3 = String.Replace(cambia2, "C", "12", false);
cambia4 = String.Replace(cambia3, "D", "13", false);
cambia5 = String.Replace(cambia4, "E", "14", false);
cambia6 = String.Replace(cambia5, "F", "15", false);
cambia7 = String.Replace(cambia6, "G", "16", false);
cambia8 = String.Replace(cambia7, "H", "17", false);
cambia9 = String.Replace(cambia8, "I", "18", false);
cambia10 = String.Replace(cambia9, "J", "19", false);
cambia11 = String.Replace(cambia10, "K", "20", false);
cambia12 = String.Replace(cambia11, "L", "21", false);
cambia13 = String.Replace(cambia12, "M", "22", false);
cambia14 = String.Replace(cambia13, "N", "23", false);
Por lo tanto :
Este Hexadecimal: 01473AD2A1F8EA868721D26A1E4846
Pasado por el filtro, seria esto; 014731013210115814108687211326101144846

Entonces, siguiente lo expuesto en el enlace plante en hacer todas las operaciones matemáticas necesarias para poder llegar a este resultado: 4NA7HHH7DKC3F1BDIGN8H1106, pero me detuve al instante, y me dije,, como un numero multiplicado por 24 que ala vez este 24 esta potenciado a 24 reduciendoce paulatinamente hasta llegar a cero me daría un resultado con LETRAS?,,, :hypno: :hypno: :hypno: :hypno:

entonces; como llego a esto? 4NA7HHH7DKC3F1BDIGN8H1106 y relei lo expuesto en el enlace, (aunque con el inglesha no me llebo ni por pintura) entendi a medias, y aun así no pude deducir cual es la manera de hacerlo :SOS: :SOS: :SOS:

....se que el filtro te hará reir o perder la esperanza en la humanidad :demo: pero aun no entiendo bien lo de las tablas y el for, así que hago lo que puedo con lo que tengo :pc: ...

Publicado: 02 Oct 2013 12:31
por Pabloko
Paso numero 1:

Borra esa puta mierda de codigo ahora mismo.

Paso numero 2

supongo que tu ya tienes el valor en HEX-16 asi que debes pasarlo a decimal asi:

decimal=tonumber("01473AD2A1F8EA868721D26A1E4846", 16)..""

luego usa la funcion que te puse:
function DEC_HEX_24(IN)
    local B,K,OUT,I,D=24,"0123456789ABCDEFGHIJKLMN","",0
    while IN>0 do
        I=I+1
        IN,D=math.floor(IN/B),math.mod(IN,B)+1
        OUT=string.sub(K,D,D)..OUT
    end
    return OUT
end
DEC_HEX_24(decimal)

eso deberia darte tu shit

Publicado: 02 Oct 2013 12:41
por sarumanice
Ok, puto amo ahorita lo ago :) :) , quiere un cafesito tambien :) :) :)

Publicado: 02 Oct 2013 13:01
por sarumanice