Base64 Decoder by RT Fishel

Тема в разделе "WASM.A&O", создана пользователем davaeron, 23 ноя 2005.

  1. davaeron

    davaeron New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    24
    Адрес:
    Russia
    Base64 Decoder

    без словаря by RT Fishel
    Код (Text):
    1.  
    2.   mov esi, szInput
    3.   mov edi, szOutput
    4.   mov edx, Size
    5. @b64_outer:
    6.   lodsd
    7.   push 4
    8.   pop ecx
    9. @b64_inner:
    10.   rol eax, 8
    11.   cmp al, '0'
    12.   jnb @b64_testchar
    13.   add al, (('/' shl 2) + 1) and 0ffh
    14.   shr al, 2
    15. @b64_testchar:
    16.   add al, 4
    17.   cmp al, 3fh
    18.   jbe @b64_store
    19.   sub al, 45h
    20.   cmp al, 19h
    21.   jbe @b64_store
    22.   sub al, 6
    23. @b64_store:
    24.   shrd ebx, eax, 6
    25.   loop @b64_inner
    26.   xchg ebx, eax
    27.   bswap eax
    28.   stosd
    29.   dec  edi
    30.   sub  edx, 4
    31.   jne  @b64_outer


    Че-то я седня плохо соображаю, но как паддинг вставить - он его не обрабатывает. Кто сталкивался?
     
  2. Sickle

    Sickle New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    181
    davaeron

    не совсем понятно, что ты хочешь... вставлять паддинг должен энкодер, для выравнивания на 4 символа. декодеру на паддинг должно быть наплевать...
     
  3. davaeron

    davaeron New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    24
    Адрес:
    Russia
    да, вот вчера-то ступил =)

    просто нужно вставить подсчет символов '='

    после lodsd

    а в конце расчитывать Выходной размер по формуле:

    SizeRAW/4*3-паддинг.