Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 хэшировать по алгоритму sha256  [new]
hum_i
Member

Откуда:
Сообщений: 550
Добрый день!
подскажите пожалуйста как можно хэшировать файл в билдере? хэшировать по алгоритму sha256
2 дек 19, 13:55    [22030321]     Ответить | Цитировать Сообщить модератору
 Re: хэшировать по алгоритму sha256  [new]
hum_i
Member

Откуда:
Сообщений: 550
Вот вижу примеры в нете, но они связаны с созданием oleobject. Как я понимаю, данный пример связан с дешифровкой данных. А мне нужно наоборот данные зашифровать в файле. Я делаю Retrieve DW и из DW заливаю данные в файл. Как можно при этом шифровать данные?
integer li_rc
oleobject loo_Crypt
string s
string ls_Hash

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

loo_Crypt = create oleobject
li_rc = loo_Crypt.ConnectToNewObject("Chilkat_9_5_0.Crypt2")
if li_rc < 0 then
destroy loo_Crypt
MessageBox("Error","Connecting to COM object failed")
return
end if

s = "The quick brown fox jumps over the lazy dog"

loo_Crypt.HashAlgorithm = "sha1"
loo_Crypt.EncodingMode = "hex"
2 дек 19, 14:42    [22030369]     Ответить | Цитировать Сообщить модератору
 Re: хэшировать по алгоритму sha256  [new]
alexis glinski
Member

Откуда: Minsk
Сообщений: 404
какая версия PB? Какая БД? Может проще всего в MS SQL:
HASHBYTES ( '<algorithm>', { @input | 'input' } )  
  
<algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512 
2 дек 19, 16:33    [22030480]     Ответить | Цитировать Сообщить модератору
 Re: хэшировать по алгоритму sha256  [new]
hum_i
Member

Откуда:
Сообщений: 550
Версия PowerBuilder 2017 R3 Build 1880
БД sybase
2 дек 19, 16:43    [22030496]     Ответить | Цитировать Сообщить модератору
 Re: хэшировать по алгоритму sha256  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8085
hum_i

как можно хэшировать файл
...
Chilkat_9_5_0.Crypt2


https://www.chilkatsoft.com/refdoc/xChilkatCrypt2Ref.html#method66
2 дек 19, 17:32    [22030549]     Ответить | Цитировать Сообщить модератору
 Re: хэшировать по алгоритму sha256  [new]
hum_i
Member

Откуда:
Сообщений: 550
Нашла в хелпе пример использования SHA256. Как я писала ранее я вытаскиваю строку out_string из dw и в цикле записываю ее в файл. Дебагом проверяю сначала вижу строка первоначально нормальная 'Клиент Иванов Иван Иванович; Номер 5555666666;...'
А потом то что получается после хеширования. Вроде правильно. Но в файле вместо строки знаки вопроса ??????????
Подскажите что не так?

lblb_data = Blob( out_string, EncodingANSI! )

lblb_sha1= lnv_CrypterObject.SHA( SHA256!, lblb_data )

out_string = String( lblb_sha1 )

ll_ret = FileWrite( FileNum, out_string )
3 дек 19, 10:16    [22030997]     Ответить | Цитировать Сообщить модератору
 Re: хэшировать по алгоритму sha256  [new]
AIS
Member

Откуда:
Сообщений: 1677
hum_i,
посмотрите здесь и здесь, там много полезного и готового.
3 дек 19, 12:13    [22031102]     Ответить | Цитировать Сообщить модератору
 Re: хэшировать по алгоритму sha256  [new]
alexis glinski
Member

Откуда: Minsk
Сообщений: 404
hum_i
Нашла в хелпе пример использования SHA256. Как я писала ранее я вытаскиваю строку out_string из dw и в цикле записываю ее в файл. Дебагом проверяю сначала вижу строка первоначально нормальная 'Клиент Иванов Иван Иванович; Номер 5555666666;...'
А потом то что получается после хеширования. Вроде правильно. Но в файле вместо строки знаки вопроса ??????????
Подскажите что не так?

lblb_data = Blob( out_string, EncodingANSI! )
		
lblb_sha1= lnv_CrypterObject.SHA( SHA256!, lblb_data )
		
out_string = String( lblb_sha1 )  // это неправильно !!!

ll_ret = FileWrite( FileNum, out_string )


в переменной lblb_sha1 будет хэш, т.е. 256 бит вычислений хэша, т.е. 32 байта (потому что 256 / 8 = 32) абсолютно любой информации, т.е. binary data, в текстовый файл она не сохранится. Но можно смело сохранить в binary файл (т.е. FileNum должен быто открыт в StreamMode!).

ll_ret = FileWrite( FileNum, lblb_sha1 )
3 дек 19, 12:53    [22031146]     Ответить | Цитировать Сообщить модератору
 Re: хэшировать по алгоритму sha256  [new]
hum_i
Member

Откуда:
Сообщений: 550
alexis glinski
hum_i
Нашла в хелпе пример использования SHA256. Как я писала ранее я вытаскиваю строку out_string из dw и в цикле записываю ее в файл. Дебагом проверяю сначала вижу строка первоначально нормальная 'Клиент Иванов Иван Иванович; Номер 5555666666;...'
А потом то что получается после хеширования. Вроде правильно. Но в файле вместо строки знаки вопроса ??????????
Подскажите что не так?

lblb_data = Blob( out_string, EncodingANSI! )
		
lblb_sha1= lnv_CrypterObject.SHA( SHA256!, lblb_data )
		
out_string = String( lblb_sha1 )  // это неправильно !!!

ll_ret = FileWrite( FileNum, out_string )


в переменной lblb_sha1 будет хэш, т.е. 256 бит вычислений хэша, т.е. 32 байта (потому что 256 / 8 = 32) абсолютно любой информации, т.е. binary data, в текстовый файл она не сохранится. Но можно смело сохранить в binary файл (т.е. FileNum должен быто открыт в StreamMode!).

ll_ret = FileWrite( FileNum, lblb_sha1 )


Спасибо, вроде получилось)
Хочу проверить себя. Расшифровать теперь свой файл. Не подскажете как это можно сделать средствами билдера?
к примеру я делаю
lf_FileRead = FileRead( lf_FileHandle, in_Text )
DO WHILE lf_FileRead > 0
lf_FileRead = FileRead( lf_FileHandle, in_Text )
...
3 дек 19, 15:28    [22031310]     Ответить | Цитировать Сообщить модератору
 Re: хэшировать по алгоритму sha256  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8085
Что значит "расшифровать"?

приведите свое понимание терминов: хэширование, шифрация, дешифрация
или внятно опишите задачу, что же Вам нужно
3 дек 19, 15:32    [22031314]     Ответить | Цитировать Сообщить модератору
 Re: хэшировать по алгоритму sha256  [new]
hum_i
Member

Откуда:
Сообщений: 550
Оказывается нужно хешировать не полностью файл csv, а только отдельные данные
и выглядеть это должно как-то так
CLIENT
5EEE266DF4AAFC647625D0FE6C5FB825
Можно ли это сделать средствами билдера и если да, то как? подскажите пожалуйста
3 дек 19, 15:40    [22031324]     Ответить | Цитировать Сообщить модератору
 Re: хэшировать по алгоритму sha256  [new]
alexis glinski
Member

Откуда: Minsk
Сообщений: 404
хэш нельзя расшифровать, это что-то типа контрольной суммы. Для шифровки посмотрите в хэлпе билдера SymmetricEncrypt / SymmetricDecrypt, а чтобы перевести двоичные данные в строку смотреть тут.
3 дек 19, 16:14    [22031359]     Ответить | Цитировать Сообщить модератору
 Re: хэшировать по алгоритму sha256  [new]
hum_i
Member

Откуда:
Сообщений: 550
alexis glinski
хэш нельзя расшифровать, это что-то типа контрольной суммы. Для шифровки посмотрите в хэлпе билдера SymmetricEncrypt / SymmetricDecrypt, а чтобы перевести двоичные данные в строку смотреть тут.


Спасибо за пример. У меня только вопрос этот алгоритм действительно подходит для sha256?
Какая то короткая получилась строка 0386AF0E

public function string of_numbertohexstring (readonly longlong all_number);String ls_hexstring
LongLong lll_first, lll_second
Char lc_symbols[0 To 15] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}

If all_number < 0 Then Return '--'
If all_number <= 255 Then
lll_first = all_number / 16
lll_second = Mod(all_number, 16)

ls_hexstring = lc_symbols[lll_first] + lc_symbols[lll_second]
Else
ls_hexstring = of_numbertohexstring(all_number / 256) + of_numbertohexstring(Mod(all_number, 256))
End If

Return ls_hexstring
end function
4 дек 19, 10:05    [22031820]     Ответить | Цитировать Сообщить модератору
 Re: хэшировать по алгоритму sha256  [new]
hum_i
Member

Откуда:
Сообщений: 550
Нашла в нете такой пример. Подскажите какого типа должна быть переменная loo_HashBytes?

integer li_rc
oleobject loo_Crypt
oleobject loo_Sb

//  This example requires the Chilkat Crypt API to have been previously unlocked.
//  See Unlock Chilkat Crypt for sample code.

loo_Crypt = create oleobject
li_rc = loo_Crypt.ConnectToNewObject("Chilkat_9_5_0.Crypt2")
if li_rc < 0 then
    destroy loo_Crypt
    MessageBox("Error","Connecting to COM object failed")
    return
end if

//  Choose the hash algorithm.
//  Can be  "sha1", "sha256", "sha384", "sha512", "md2", "md5", "haval", "ripemd128", "ripemd160","ripemd256", or "ripemd320".
loo_Crypt.HashAlgorithm = "sha256"

//  The byte representation of the string matters when hashing.
//  Tell Chilkat that we want to use the utf-8 byte representation.
loo_Crypt.Charset = "utf-8"

loo_HashBytes = loo_Crypt.HashString("They who can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.")

//  Let's examine the hash as a hex string.
loo_Sb = create oleobject
li_rc = loo_Sb.ConnectToNewObject("Chilkat_9_5_0.StringBuilder")

loo_Sb.AppendEncoded(loo_HashBytes,"hex")
Write-Debug "SHA256 hash = " + loo_Sb.GetAsString()


destroy loo_Crypt
destroy loo_Sb
4 дек 19, 11:46    [22031898]     Ответить | Цитировать Сообщить модератору
 Re: хэшировать по алгоритму sha256  [new]
alexis glinski
Member

Откуда: Minsk
Сообщений: 404
hum_i
alexis glinski
хэш нельзя расшифровать, это что-то типа контрольной суммы. Для шифровки посмотрите в хэлпе билдера SymmetricEncrypt / SymmetricDecrypt, а чтобы перевести двоичные данные в строку смотреть тут.


Спасибо за пример. У меня только вопрос этот алгоритм действительно подходит для sha256?
Какая то короткая получилась строка 0386AF0E

public function string of_numbertohexstring (readonly longlong all_number);String ls_hexstring
LongLong lll_first, lll_second
Char lc_symbols[0 To 15] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}

If all_number < 0 Then Return '--'
If all_number <= 255 Then
lll_first = all_number / 16
lll_second = Mod(all_number, 16)

ls_hexstring = lc_symbols[lll_first] + lc_symbols[lll_second]
Else
ls_hexstring = of_numbertohexstring(all_number / 256) + of_numbertohexstring(Mod(all_number, 256))
End If

Return ls_hexstring
end function

внимательней не аргументы смотрите. lblb_sha1 это 32 байта, ну так сделайте цикл и двигайтесь по этому блобу функцией
BlobMid
4 дек 19, 14:50    [22032127]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить