purebasic.info
http://purebasic.info/phpBB3ex/

HMAC-SHA512
http://purebasic.info/phpBB3ex/viewtopic.php?f=5&t=3076
Страница 2 из 2

Автор:  Explode [ Сб апр 13, 2013 5:19 am ]
Заголовок сообщения: 

Блин, теперь sha512 из sha2.lib ругается на память.

Автор:  lakomet [ Сб апр 13, 2013 5:58 am ]
Заголовок сообщения: 

Я у буржуев тырил код отсюда, переделывал под ютф. Собственно код
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
EnableExplicit
 
Procedure my_poke_s(*pointer, string.s)
 
  Protected *temp = AllocateMemory(StringByteLength(string))
  PokeS(*temp, string, -1, #PB_UTF8)
  Protected Len_mem_sourse_str = MemoryStringLength(*temp, #PB_UTF8)
  CopyMemory(*temp, *pointer, Len_mem_sourse_str)
  FreeMemory(*temp)
 
EndProcedure
 
Procedure.s encode_base_64(string.s)
 
  Protected length.l
  Protected out_length.l = 64 + 2 * Len(string)
  Protected *in_buffer = AllocateMemory(Len(string) + 1)
  Protected *out_buffer = AllocateMemory(out_length)
 
  PokeS(*in_buffer, string, Len(string), #PB_Ascii)
  length = Base64Encoder(*in_buffer, Len(string), *out_buffer, out_length)
  ProcedureReturn PeekS(*out_buffer, length, #PB_Ascii)
 
EndProcedure
 
Procedure.s decode_base_64(string.s)
 
  Protected length.l
  Protected out_length.l = 64 + 2 * Len(string)
  Protected *in_buffer = AllocateMemory(Len(string) + 1)
  Protected *out_buffer = AllocateMemory(out_length)
 
  PokeS(*in_buffer, string, Len(string), #PB_Ascii)
  length = Base64Decoder(*in_buffer, Len(string), *out_buffer, out_length)
  ProcedureReturn PeekS(*out_buffer, length, #PB_Ascii)
 
EndProcedure
 
#ipad = $36
#opad = $5c
#block_size = 64
 
Procedure xor_block(*block, value.a)
 
  Protected i.l
 
  For i = 0 To (#block_size - 1)
    PokeA(*block + i, PeekA(*block + i) ! value)
  Next
 
EndProcedure
 
Procedure hex_string_2_bin(string.s, *bin)
 
  Protected size.l
  Protected i.l
 
  size = Round(Len(string) / 2, #PB_Round_Down)
  For i = 0 To (size - 1)
    PokeA(*bin, Val("$" + Mid(string, i * 2 + 1, 2)))
    *bin = *bin + 1
  Next
 
EndProcedure
 
Procedure.s hmac_md5(key.s, text.s)
 
  Protected *i_key
  Protected *o_key
  Protected *front_part
  Protected *back_part
  Protected *text = AllocateMemory(#block_size)
  Protected fingerprint.s
  Protected *fingerprint
 
  *i_key = AllocateMemory(#block_size)
  my_poke_s(*i_key, key)
  xor_block(*i_key, #ipad)
  *back_part = AllocateMemory(#block_size + Len(text))
  CopyMemory(*i_key, *back_part, #block_size)
  my_poke_s(*back_part + #block_size, text)
  fingerprint = MD5Fingerprint(*back_part, #block_size + Len(text))
  *fingerprint = AllocateMemory(16)
  hex_string_2_bin(fingerprint, *fingerprint)
 
  *o_key = AllocateMemory(#block_size)
  my_poke_s(*o_key, key)
  xor_block(*o_key, #opad)
  *front_part = AllocateMemory(#block_size + Len(fingerprint))
  CopyMemory(*o_key, *front_part, #block_size)
  CopyMemory(*fingerprint, *front_part + #block_size, 16)
  fingerprint = MD5Fingerprint(*front_part, #block_size + 16)
  ProcedureReturn fingerprint
 
EndProcedure
 
Procedure.s hmac_sha1(key.s, text.s)
 
  Protected *i_key
  Protected *o_key
  Protected *front_part
  Protected *back_part
  Protected *text = AllocateMemory(#block_size)
  Protected fingerprint.s
  Protected *fingerprint
 
  *i_key = AllocateMemory(#block_size)
  my_poke_s(*i_key, key)
  xor_block(*i_key, #ipad)
  *back_part = AllocateMemory(#block_size + Len(text))
  CopyMemory(*i_key, *back_part, #block_size)
  my_poke_s(*back_part + #block_size, text)
  fingerprint = SHA1Fingerprint(*back_part, #block_size + Len(text))
  *fingerprint = AllocateMemory(20)
  hex_string_2_bin(fingerprint, *fingerprint)
 
  *o_key = AllocateMemory(#block_size)
  my_poke_s(*o_key, key)
  xor_block(*o_key, #opad)
  *front_part = AllocateMemory(#block_size + Len(fingerprint))
  CopyMemory(*o_key, *front_part, #block_size)
  CopyMemory(*fingerprint, *front_part + #block_size, 20)
  fingerprint = SHA1Fingerprint(*front_part, #block_size + 20)
  ProcedureReturn fingerprint
 
EndProcedure
 
Debug hmac_sha1("31011b18201328d5bD81201d887e0e89854636E9", "aaafdsfsdfs")



Тут sha1, тебе надо sha2, но по образу и подобию попробуй переделать. sha1 и sha2 вроде по алгоритму одинаковые, различие в длинне блоков, вообщем пробуй. Если сделаешь, незабудь поделиться результатом :wink:

Автор:  Explode [ Сб апр 13, 2013 4:06 pm ]
Заголовок сообщения: 

Нашел библиотеку QuickHash Library, делает именно то, что мне и нужно.
Документация здесь http://www.slavasoft.com/quickhash/help ... erview.htm
Всем спасибо.

Вложения:
quickhash.zip [556.94 KiB]
Скачиваний: 145

Автор:  Пётр [ Сб апр 13, 2013 4:36 pm ]
Заголовок сообщения: 

Это случайно не подойдет? http://www.purebasic.fr/english/viewtop ... 14&t=28221

Автор:  lakomet [ Сб апр 13, 2013 4:45 pm ]
Заголовок сообщения: 

Здесь 32bit, а здесь 64bit без всяких библиотек

Автор:  Explode [ Сб апр 13, 2013 5:01 pm ]
Заголовок сообщения: 

Пётр писал(а):
Это случайно не подойдет? http://www.purebasic.fr/english/viewtop ... 14&t=28221

Если использовать с HMAC оберткой, что я писал выше, то вполне.
lakomet писал(а):
Здесь 32bit, а здесь 64bit без всяких библиотек

Эх, пораньше бы эти ссылочки найти))

Автор:  Sosed [ Пт мар 02, 2018 2:20 pm ]
Заголовок сообщения:  Re: HMAC-SHA512

Добрый день!
Ребята помогите ПЛЗ, необходимо реализовать шифрование HMAC-SHA512. Все выше перечисленное перепробовал, дают неверные результаты. Отзовитесь кто решил.

Автор:  Sosed [ Пт мар 02, 2018 4:03 pm ]
Заголовок сообщения:  Re: HMAC-SHA512

Нашел библиотеку с генерацией кода сразу в Пурик https://tools.chilkat.io/hmac.cshtml#macResult ,на сайте генерит правильно, вставив в IDE выдает пустую строку, не могу разобраться


Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
IncludeFile "CkCrypt2.pb"
 
Procedure ChilkatExample()
 
    crypt.i = CkCrypt2::ckCreate()
    If crypt.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf
 
    CkCrypt2::setCkMacAlgorithm(crypt, "hmac")
    CkCrypt2::setCkEncodingMode(crypt, "fingerprint")
    CkCrypt2::setCkHashAlgorithm(crypt, "SHA-512")
    success.i = CkCrypt2::ckSetMacKeyEncoded(crypt,"1afb448f45993315beb9e9e78e3715aa","ascii")
    CkCrypt2::setCkCharset(crypt, "windows-1251")
    result.s = CkCrypt2::ckMacStringENC(crypt,"hi")
 
 
    CkCrypt2::ckDispose(crypt)
 
 
    ProcedureReturn
EndProcedure


должно получиться:
34f10e41202ffea743c6d802f10144ed1c60e1462ce90b0e83a49caaa9c8d27b01f308a867b8b340090adf368f438112206aa51fc947ffb53941c04d1aeae353

Автор:  SereZa [ Пт мар 02, 2018 7:18 pm ]
Заголовок сообщения:  Re: HMAC-SHA512

а версия PB, которая в файле - и указана ли она там ваще? - совпадает с версией, установленной на компьютере?

Автор:  LinXP [ Пн мар 05, 2018 4:55 am ]
Заголовок сообщения:  Re: HMAC-SHA512

Sosed,
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
IncludeFile "CkCrypt2.pb"
 
Procedure ChilkatExample()
  crypt.i = CkCrypt2::ckCreate()
  If crypt.i = 0
    Debug "Failed to create object."
    ProcedureReturn
  EndIf
 
  success.i = CkCrypt2::ckUnlockComponent(crypt,"LinXPv.CB10299_QJvUwFEPCRoZ")
  If success <> 1
    Debug CkCrypt2::ckLastErrorText(crypt)
    Debug "unlock failed."
    CkCrypt2::ckDispose(crypt)
    ProcedureReturn
  EndIf
 
  CkCrypt2::setCkMacAlgorithm(crypt, "hmac")
  CkCrypt2::setCkEncodingMode(crypt, "hex")
  CkCrypt2::setCkHashAlgorithm(crypt, "SHA-512")
  success.i = CkCrypt2::ckSetMacKeyEncoded(crypt,"1afb448f45993315beb9e9e78e3715aa","ascii")
  CkCrypt2::setCkCharset(crypt, "windows-1251")
  result.s = CkCrypt2::ckMacStringENC(crypt,"hi")
 
  Debug LCase(result)
 
  CkCrypt2::ckDispose(crypt)
  ProcedureReturn
EndProcedure
 
ChilkatExample()


Выхлоп: 34f10e41202ffea743c6d802f10144ed1c60e1462ce90b0e83a49caaa9c8d27b01f308a867b8b340090adf368f438112206aa51fc947ffb53941c04d1aeae353

Автор:  Sosed [ Ср мар 07, 2018 8:46 am ]
Заголовок сообщения:  Re: HMAC-SHA512

LinXP, низкий тебе поклон, то что надо.
Теперь стал другой вопрос, это шифрование надо компилировать в Юникоде, и работает она в одной упряжке с Curl-библиотекой, которая нормально работает только если компилируется как обычный текст, как их можно подружить??? Пробовал засунуть шифрование в DLL, соответственно результата ноль. Других идей нет...??
А случаем, эта Chilkat-библиотека не может работать как Curl? Необходимо формировать HTTPS-запросы. Есть ли где нибудь нормальное описание??

Автор:  LinXP [ Ср мар 07, 2018 9:02 pm ]
Заголовок сообщения:  Re: HMAC-SHA512

Дока https://www.chilkatsoft.com/refdoc/pbHttpRef.html
Примеры https://www.example-code.com/purebasic/http.asp

Страница 2 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/