HEX >> ASCII

Тема в разделе "WASM.BEGINNERS", создана пользователем lust, 10 июн 2008.

  1. lust

    lust New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2007
    Сообщения:
    72
    Добрый день
    Известно ли какое-нибудь решение которое может перевести HEX в его ASCII представление,
    Конкретно мне надо хеш из 16 ричного вида перевести в ASCCII кодировку. Трабла заключается в том, что в традиционном ASCII представлении хеша для байта используется 2 символа(то есть hex визуально выраженный через ASCII). Я пытался написать код, вроде даже сделала его максимально очевидным и понятным, но всё равно чё-то не пашет.
    Код (Text):
    1.       .386
    2.       .model flat, stdcall  ; 32 bit memory model
    3.       option casemap :none  ; case sensitive
    4.  
    5.       include c:\masm32\include\windows.inc
    6.       include c:\masm32\include\kernel32.inc
    7.       include c:\masm32\include\shell32.inc
    8.       include c:\masm32\include\user32.inc
    9.       include c:\masm32\include\GDI32.inc
    10.       include c:\masm32\include\comdlg32.inc
    11.       include c:\masm32\include\COMCTL32.inc
    12.       include c:\masm32\include\cryptohash.inc
    13.       include c:\masm32\include\ole32.inc
    14.       include c:\masm32\include\wininet.inc
    15.       include c:\masm32\include\url.inc
    16.       include c:\masm32\include\masm32.inc
    17.       include c:\masm32\include\wsock32.inc
    18.       include c:\masm32\include\mpr.inc
    19.  
    20.       includelib c:\masm32\lib\mpr.lib
    21.       includelib c:\masm32\lib\wsock32.lib
    22.       includelib c:\masm32\lib\url.lib
    23.       includelib c:\masm32\lib\wininet.lib
    24.       includelib c:\masm32\lib\ole32.lib
    25.       includelib c:\masm32\lib\GDI32.lib
    26.       includelib c:\masm32\lib\comdlg32.lib
    27.       includelib c:\masm32\lib\COMCTL32.lib
    28.       includelib c:\masm32\lib\cryptohash.lib
    29.       includelib c:\masm32\lib\user32.lib
    30.       includelib c:\masm32\lib\kernel32.lib
    31.       includelib c:\masm32\lib\shell32.lib
    32.       includelib c:\masm32\lib\masm32.lib
    33. ;#########################################################################
    34.  
    35. ;####################################Объявляем  переменные#######################
    36.  
    37. ;;;;;;;;;;;;;константы;;;;;;;;;;;;;;;
    38.    
    39. .data
    40. FileName db "md5.txt",0
    41. FileNameASCII db "md5ASCII.txt",0
    42. string  db "test",0
    43. stringSize = ($-string)
    44.  
    45. char db "0123456789ABCDEF",0
    46.  
    47. md5 dd ?
    48. md5ascii dd ?
    49. hFile dd ?
    50. bWritten dd ?
    51.  
    52.  
    53. pmd5ASCII   dd ?
    54. mHandle     dd ?
    55. ;===========================НАЧИНАЕТСЯ КОД=======================================
    56. .code
    57. start:
    58.  
    59. invoke MD5Init
    60. invoke MD5Update, addr string, stringSize
    61. invoke MD5Final
    62. mov md5,eax
    63.  
    64. invoke GlobalAlloc,GMEM_FIXED,17     ; Выделяем память для буфера  считываемых данных
    65. mov mHandle,eax
    66. invoke GlobalLock,eax
    67. mov pmd5ASCII, eax
    68.  
    69. mov eax,17
    70. mov ebx,md5
    71. mov ecx,pmd5ASCII
    72.  
    73. .while eax!=0
    74. push eax
    75.  
    76. mov eax,[ebx]
    77. shr eax,5
    78.  
    79.     mov edx,0h
    80.     .IF eax==edx
    81.     mov edx, offset char
    82.     add edx,0
    83.     mov edx,[edx]
    84.     mov [ecx],edx
    85.     .ENDIF
    86.    
    87.     mov edx,1h
    88.     .IF eax==edx
    89.     mov edx, offset char
    90.     add edx,1
    91.     mov edx,[edx]
    92.     mov [ecx],edx
    93.     .ENDIF
    94.    
    95.     mov edx,2h
    96.     .IF eax==edx
    97.     mov edx, offset char
    98.     add edx,2
    99.     mov edx,[edx]
    100.     mov [ecx],edx
    101.     .ENDIF
    102.    
    103.     mov edx,3h
    104.     .IF eax==edx
    105.     mov edx, offset char
    106.     add edx,3
    107.     mov edx,[edx]
    108.     mov [ecx],edx
    109.     .ENDIF
    110.    
    111.     mov edx,4h
    112.     .IF eax==edx
    113.     mov edx, offset char
    114.     add edx,4
    115.     mov edx,[edx]
    116.     mov [ecx],edx
    117.     .ENDIF
    118.    
    119.     mov edx,5h
    120.     .IF eax==edx
    121.     mov edx, offset char
    122.     add edx,5
    123.     mov edx,[edx]
    124.     mov [ecx],edx
    125.     .ENDIF
    126.    
    127.     mov edx,6h
    128.     .IF eax==edx
    129.     mov edx, offset char
    130.     add edx,6
    131.     mov edx,[edx]
    132.     mov [ecx],edx
    133.     .ENDIF
    134.    
    135.     mov edx,7h
    136.     .IF eax==edx
    137.     mov edx, offset char
    138.     add edx,7
    139.     mov edx,[edx]
    140.     mov [ecx],edx
    141.     .ENDIF
    142.    
    143.     mov edx,8h
    144.     .IF eax==edx
    145.     mov edx, offset char
    146.     add edx,8
    147.     mov edx,[edx]
    148.     mov [ecx],edx
    149.     .ENDIF
    150.    
    151.     mov edx,9h
    152.     .IF eax==edx
    153.     mov edx, offset char
    154.     add edx,9
    155.     mov edx,[edx]
    156.     mov [ecx],edx
    157.     .ENDIF
    158.    
    159.     mov edx,10h
    160.     .IF eax==edx
    161.     mov edx, offset char
    162.     add edx,10
    163.     mov edx,[edx]
    164.     mov [ecx],edx
    165.     .ENDIF
    166.    
    167.     mov edx,11h
    168.     .IF eax==edx
    169.     mov edx, offset char
    170.     add edx,11
    171.     mov edx,[edx]
    172.     mov [ecx],edx
    173.     .ENDIF
    174.    
    175.     mov edx,12h
    176.     .IF eax==edx
    177.     mov edx, offset char
    178.     add edx,12
    179.     mov edx,[edx]
    180.     mov [ecx],edx
    181.     .ENDIF
    182.    
    183.     mov edx,13h
    184.     .IF eax==edx
    185.     mov edx, offset char
    186.     add edx,13
    187.     mov edx,[edx]
    188.     mov [ecx],edx
    189.     .ENDIF
    190.    
    191.     mov edx,14h
    192.     .IF eax==edx
    193.     mov edx, offset char
    194.     add edx,14
    195.     mov edx,[edx]
    196.     mov [ecx],edx
    197.     .ENDIF
    198.    
    199.     mov edx,15h
    200.     .IF eax==edx
    201.     mov edx, offset char
    202.     add edx,15
    203.     mov edx,[edx]
    204.     mov [ecx],edx
    205.     .ENDIF
    206.    
    207.     mov edx,16h
    208.     .IF eax==edx
    209.     mov edx, offset char
    210.     add edx,16
    211.     mov edx,[edx]
    212.     mov [ecx],edx
    213.     .ENDIF
    214.    
    215.  
    216.  
    217. pop eax
    218. inc ecx
    219. inc ebx
    220. dec eax
    221.  
    222. .endw
    223.  
    224.  
    225. invoke  MessageBox, NULL, md5, addr string, MB_OK + MB_ICONSTOP
    226. invoke  MessageBox, NULL, pmd5ASCII, addr string, MB_OK + MB_ICONSTOP
    227.  
    228. invoke  CreateFile, offset FileName, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, 0
    229. mov     hFile, eax
    230. invoke  WriteFile, hFile, md5, 16, addr bWritten, NULL
    231. invoke  CloseHandle, hFile
    232.  
    233.  
    234. invoke  CreateFile, offset FileNameASCII , GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, 0
    235. mov     hFile, eax
    236. invoke  WriteFile, hFile, pmd5ASCII, 16, addr bWritten, NULL
    237. invoke  CloseHandle, hFile
    238.  
    239. invoke GlobalUnlock,pmd5ASCII
    240. invoke GlobalFree,mHandle
    241.  
    242. ret
    243. end start
    Этот код даже не полностью хеш должен кодировать в ascii а только старшую половину каждого байта.
    Если есть идеи что не так - пишите.
    Спасибо.
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    lust
    Все просто. К чему столько мучений
    Код (Text):
    1. .data
    2. hextbl       db '0123456789ABCDEF'
    3. .code
    4. ...
    5. mov ebx, offset hextbl
    6. mov ecx, 16
    7. mov esi, offset hexstr
    8. mov edi, offset ascistr
    9. @@loop:
    10. lodsb
    11. mov ah, al
    12. and ax, 0FF0h
    13. shr al, 4
    14. xlat
    15. rol ax, 8
    16. xlat
    17. shl ah, 4
    18. or al, ah
    19. stosb
    20. loop @@loop