Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Вычислить хеш по алгоритму SHA-512, используя системную dll / 13 сообщений из 13, страница 1 из 1
05.10.2012, 09:46
    #37984826
prog13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить хеш по алгоритму SHA-512, используя системную dll
Доброго времени суток!

Нужно получить хэш текстового файла по алгоритму SHA512. По ссылке вышел на проект Crypto
http://www.sql.ru/forum/actualthread.aspx?tid=756229&hl=sha%20512
Если указать
Код: powershell
1.
in_crypto.iHashAlgorithm		= in_crypto.CALG_SHA_512


то функция вываливается в ошибку

Код: powershell
1.
2.
3.
4.
5.
If Not CryptCreateHash(lul_hProv, iHashAlgorithm, 0, 0, lul_hHash) Then
	of_GetLastError(lul_error, ls_msgtext)
   CryptReleaseContext(lul_hProv, 0)
	SignalError(lul_error, "CryptCreateHash:~r~n~r~n" + ls_msgtext)
End If



WinXP SP3

Заранее спасибо
...
Рейтинг: 0 / 0
05.10.2012, 09:51
    #37984834
prog13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить хеш по алгоритму SHA-512, используя системную dll
up
...
Рейтинг: 0 / 0
05.10.2012, 10:52
    #37984969
prog13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить хеш по алгоритму SHA-512, используя системную dll
up
...
Рейтинг: 0 / 0
05.10.2012, 11:32
    #37985059
prog13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить хеш по алгоритму SHA-512, используя системную dll
нашел инфу что advapi32.dll в XP не поддерживает SHA512, пробовал от семерки зарегистрировать - не хочет региться
...
Рейтинг: 0 / 0
05.10.2012, 12:38
    #37985201
prog13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить хеш по алгоритму SHA-512, используя системную dll
up
...
Рейтинг: 0 / 0
05.10.2012, 14:38
    #37985437
prog13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить хеш по алгоритму SHA-512, используя системную dll
.
...
Рейтинг: 0 / 0
05.10.2012, 21:54
    #37986087
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить хеш по алгоритму SHA-512, используя системную dll
prog13,

АПать тут бесполезно (ваш вопрос еще несколько недель а то и месяцев будет на первой странице).
Все, кто мог ответить на ваш вопрос, уже прочли его. И если нет ответов, то не потому что вопрос не увидели, а потому что ответа нет.

По теме.
Я вам рекомендую написать сначала простейшую программу на С или С++ вызывающую ту функцию и добиться чтобы она работала.
Потому что нет смысла возиться с оберткой в PB если ф-я в принципе не работает.
К тому же проблему, сформулированную в терминах С можно поднять на соответствующий форумах, а там кол-во тех кто может знать ответ на порядки выше чем здесь.
...
Рейтинг: 0 / 0
08.10.2012, 09:49
    #37987534
prog13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить хеш по алгоритму SHA-512, используя системную dll
Anatoly Moskovsky,
В том то и дело, что приложение Crypto работает (вычисляет хеш), но алгоритм SHA-512 не работает. в msdn читал про mscorlib.dll.
Пример
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub test()
Dim text As Object
Dim SHA512 As Object

Set text = CreateObject("System.Text.UTF8Encoding")
Set SHA512 = CreateObject("System.Security.Cryptography.SHA512Managed")

Debug.Print ToBase64String(SHA512.ComputeHash_2((text.GetBytes_4("Hello World"))))

End Sub



а как это в PB завернуть?
...
Рейтинг: 0 / 0
08.10.2012, 14:01
    #37988181
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить хеш по алгоритму SHA-512, используя системную dll
prog13,

Я не знаю как это развернуть, но даже если это возможно, вы уверены что вы хотите в свой проект добавить зависимость от .Net?
...
Рейтинг: 0 / 0
08.10.2012, 14:27
    #37988249
prog13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить хеш по алгоритму SHA-512, используя системную dll
Хеширование файлов не является целью моего проекта. С PB только начал работать и поэтому ищу что-нить попроще (без написания алгоритма), как в вышеописанном примере: вызвал функцию - получил хэш.
...
Рейтинг: 0 / 0
08.10.2012, 17:16
    #37988738
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить хеш по алгоритму SHA-512, используя системную dll
prog13Хеширование файлов не является целью моего проекта. С PB только начал работать и поэтому ищу что-нить попроще (без написания алгоритма), как в вышеописанном примере: вызвал функцию - получил хэш.Читаем здесь
MSDN BlogOur "Microsoft Base/Strong/Enhanced Cryptographic Providers" are implemented on Rsaenh.dll. If you try to use CryptCreateHash with any SHA-2 Algid (CALG_SHA_256, CALG_SHA_384, CALG_SHA_512) and any of these CSP, you will still get a NTE_BAD_ALGID error on XP SP3. Why? The issue is that those Algid's are only valid with providers of type PROV_RSA_AES , and these CSP are of type PROV_RSA_FULL .
И далее, про реестр.

Примерный код:
Код: vbnet
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.
n_cryptoapi in_crypto
string docname, named
integer value
value = GetFileOpenName("Select File", &
		+ docname, named, "TXT", &
		+ "Text Files (*.TXT),*.TXT" )

IF value = 1 THEN 
	integer li_FileNum
	long flen, bytes_read, loops, i
	blob b, tot_b
	
	flen = FileLength(docname)
	li_FileNum = FileOpen(docname, StreamMode!, Read!, LockRead!)
	IF flen > 32765 THEN
			IF Mod(flen, 32765) = 0 THEN
				loops = flen/32765
			ELSE
				loops = (flen/32765) + 1
			END IF
	ELSE
			loops = 1
	END IF
	FOR i = 1 to loops
			bytes_read = FileRead(li_FileNum, b)
			tot_b = tot_b + b
	NEXT
	FileClose(li_FileNum)

	string hash
	in_crypto.iHashAlgorithm		= in_crypto.CALG_SHA_256
	in_crypto.iCryptoProvider		= in_crypto.MS_ENH_RSA_AES_PROV
	in_crypto.iProviderType			= in_crypto.PROV_RSA_AES
	hash =  in_crypto.of_gethashvalue( tot_b )
	messagebox ("hash", hash)
END IF


Но! Есть одна тонкость.
В функции of_gethashvalue есть объявление
Код: sql
1.
2.
3.
//Blob{20} lblob_hash 
//может не хватить. Замените на что-нибудь типа:
Blob{512} lblob_hash. 


На Win7 отрабатывает нормально.
Кроме того, лично мне очень не нравятся не инициализированные строковые переменные, которые используются в апишных вызовах, поэтому рекомендую добавить что-нибудь. вроде
Код: sql
1.
ls_msgtext = space(1024)


К сожалению, гарантировать работоспособность не могу, под рукой нет WinXP. Пробуйте.
...
Рейтинг: 0 / 0
08.10.2012, 17:36
    #37988785
prog13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить хеш по алгоритму SHA-512, используя системную dll
PL99,
Спасибо огромное за помощь. Завтра попробую - отпишусь по результату
...
Рейтинг: 0 / 0
09.10.2012, 14:05
    #37990033
prog13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить хеш по алгоритму SHA-512, используя системную dll
PL99,
СПАСИБО за помощь, действительно выручили. Натыкался на эту статью, видать, не придал особого значения.
Код: powershell
1.
2.
3.
	
        in_crypto.iCryptoProvider	        = in_crypto.MS_ENH_RSA_AES_PROV
	in_crypto.iProviderType			= in_crypto.PROV_RSA_AES



у меня WinXP SP3, все работает (сверился c http://hash.online-convert.com/sha512-generator )
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Вычислить хеш по алгоритму SHA-512, используя системную dll / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]