AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 24.11.2015, 15:59   #1  
axm2013
Гость
 
n/a
Хэш функции Why?
Вопрос all?
В 12 используются как минимум два алгоритма hash функций:
sha1
класс DimensionAttributeValueSetStorage
метод getHash

и md5
класс RLedgerTurnoverParamHashKey
метод getHash
и традиционная паранойя не дает покоя с традиционными вопросами почему? и что лучше?

ЗЫ Хэш функции ессно вещь замечательная и соблазнительная и хочется научится их готовить правильно

Last edited by axm2013; 24.11.2015 at 16:02.
Old 24.11.2015, 16:02   #2  
Ivanhoe is offline
Ivanhoe
Участник
Ivanhoe's Avatar
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2161 (81) +++++++++
Join Date: 29.09.2005
Location: Санкт-Петербург
Может, потому что второе делала локализация, а первое - центр?
__________________
Ivanhoe as is..
Old 24.11.2015, 16:06   #3  
axm2013
Гость
 
n/a
Quote:
Originally Posted by Ivanhoe View Post
Может, потому что второе делала локализация, а первое - центр?
И кого правильнее клеймить позором а кому честь и слава в веках? Индусов или локализаторов?

Ну и конечно SHА1 оно вроде как надежнее, но значит ли это что MD5 дает больше коллизий и реально не стоит даже думать о ней? Ведь люди зачем то заморачивались и явно не спроста.

PS ну и навскидку может кто подскажет какую нибудь стандартную функцию упаковки строки или куда смотреть? Просто есть некие текстовые поля набор которых на вид хорошо бы представить одним полем и по идее обычную строчку с низкой энтропией можно упаковать без особых потерь.

Last edited by axm2013; 24.11.2015 at 17:15.
This post has been rated by: mazzy (2).
Old 25.11.2015, 09:47   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Join Date: 28.11.2005
Location: Москва
Blog Entries: 3
Quote:
Originally Posted by axm2013 View Post
В 12 используются как минимум два алгоритма hash функций: sha1 \Classes\DimensionAttributeValueSetStorage\getHash
и md5 \Classes\RLedgerTurnoverParamHashKey\getHash
что лучше?
По идее лучше та хэш-функция, которая при прочих равных дает меньше коллизий, а это, как правило, коррелирует с мощностью множества значений функции. С этой точки зрения 128-битное значение MD5 смотрится несколько менее надежным, чем 160-битное значение SHA1. С другой стороны, MD5 до недавнего времени широко использовалась в качестве криптографической хеш-функции, так что для данных в Аксапте ее должно быть более чем достаточно.
Quote:
Originally Posted by axm2013 View Post
Ну и конечно SHА1 оно вроде как надежнее, но значит ли это что MD5 дает больше коллизий и реально не стоит даже думать о ней? Ведь люди зачем то заморачивались и явно не спроста.
Думаю, люди как раз не заморачивались, а взяли то, что на слуху, - SHA1. У MD5 есть одно огромное преимущество перед SHA1: длина ее значения совпадает с длиной GUID, поэтому его очень удобно хранить в поле типа GUID, наглядно видеть его значение и фильтроваться по нему, в т.ч. в прямых SQL-запросах, потому что GUID - это "родной" тип данных для SQL Server, в T-SQL называющийся uniqueidentifier. Никто ведь не кричит о том, что uniqueidentifier в T-SQL, используемый в тысячах промышленных баз данных, на самом деле не такой уж unique.
На мой взгляд, использование MD5 в Аксапте более чем оправдано: ожидать коллизий на таких смешных для криптографической хеш-функции объемах данных (тысячи наборов финансовых аналитик, миллионы комбинаций складских аналитик) не стоит, а удобство использования типа GUID для хранения значений MD5 подчас бесценно.
Quote:
Originally Posted by axm2013 View Post
может кто подскажет какую нибудь стандартную функцию упаковки строки или куда смотреть? Просто есть некие текстовые поля набор которых на вид хорошо бы представить одним полем и по идее обычную строчку с низкой энтропией можно упаковать без особых потерь.
Это нарушение 1-й нормальной формы. Используйте числовые коды вместо строк с низкой энтропией, если хотите сэкономить и повысить производительность.
This post has been rated by: mazzy (2), macklakov (1), ZVV (1), Logger (3), AP-1055D (1).
Old 25.11.2015, 10:41   #5  
axm2013
Гость
 
n/a
Quote:
Originally Posted by gl00mie View Post
Думаю, люди как раз не заморачивались, а взяли то, что на слуху, - SHA1.
В том то и дело что заморачивались. Создали свою отдельно, не используя стандартные возможности от MS.

Quote:
Originally Posted by gl00mie View Post
. Никто ведь не кричит о том, что uniqueidentifier в T-SQL, используемый в тысячах промышленных баз данных, на самом деле не такой уж unique.
Так как вероятность совпадения ... В то же время с хэш функциями не все так же просто.

Quote:
Originally Posted by gl00mie View Post
Это нарушение 1-й нормальной формы.
.
Второй тогда уж: но это не принципиально так как нормализация не является необходимым условием щастья.

Quote:
Originally Posted by gl00mie View Post
Используйте числовые коды вместо строк с низкой энтропией, если хотите сэкономить и повысить производительность.
Нет мне нужно именно эквивалент хэш функции так как данные возможно будут перезаливать. Идеальная хэш функция была бы в самый раз.
Old 25.11.2015, 12:16   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Join Date: 28.11.2005
Location: Москва
Blog Entries: 3
Quote:
Originally Posted by axm2013 View Post
Quote:
Originally Posted by gl00mie View Post
Думаю, люди как раз не заморачивались, а взяли то, что на слуху, - SHA1.
В том то и дело что заморачивались. Создали свою отдельно, не используя стандартные возможности от MS.
Если вы думаете, что под AX 2012 кто-то озаботился разработкой нового алгоритма криптографической хеш-функции, то глубоко заблуждаетесь - погуглите, алгоритму SHA1 уже 20 лет Кроме того, к разработке алгоритма MD5 Microsoft также не имеет никакого отношения.
Quote:
Originally Posted by axm2013 View Post
Так как вероятность совпадения ... В то же время с хэш функциями не все так же просто.
"Паранойя - профессиональное заболевание специалистов по безопасности, но любители могут в этой области зайти гораздо дальше" (с) Банки десятилетиями доверяли электронной подписи, использующей в т.ч. алгоритм MD5, миллиардные транзакции, а тут - вы со своими текстовыми полями...
Quote:
Originally Posted by axm2013 View Post
Нет мне нужно именно эквивалент хэш функции так как данные возможно будут перезаливать. Идеальная хэш функция была бы в самый раз.
Не бывает идеальных хеш-функций, другое дело, что под ваши конкретные условия может за глаза хватить того или иного алгоритма. Посмотрите в сторону TextBuffer::strHashKey(), если почему-то считаете, что она вам не подходит, - возьмите ту же MD5.
Old 25.11.2015, 12:35   #7  
axm2013
Гость
 
n/a
Quote:
Originally Posted by gl00mie View Post
Если вы думаете, что под AX 2012 кто-то озаботился разработкой нового алгоритма криптографической хеш-функции, то глубоко заблуждаетесь - погуглите, алгоритму SHA1 уже 20 лет
Я как бэ в курсе. Но реализация идет Microsoft.Dynamics.AX.Fim.Dimensions.Hash::ComputeSHA1Hash
т.е. сделали свою вместо использования
System.Security.Cryptography.SHA1

Quote:
Originally Posted by gl00mie View Post
а тут - вы со своими текстовыми полями...
Дело в том что

Quote:
Originally Posted by gl00mie View Post
Не бывает идеальных хеш-функций,
В теории да (для произвольного множества), на практике при определенных допущениях (например при фиксации размеров словаря) бывают.

Quote:
Originally Posted by gl00mie View Post
TextBuffer::strHashKey(), если почему-то считаете, что она вам не подходит,
она не подходит по причине что не видел внятного описания что там. Играться с черным ящиком отвечая за последствия его работы страшно.

Quote:
Originally Posted by gl00mie View Post
- возьмите ту же MD5.
Это понятно, так в общем то и сделал +- но почему от нее отказались в одном из случаев в Dynamics Ax?
Может они что то знали?
Наверняка в MS тот кто делал SHA1 был в курсе про MD5 и прочее типа того что в системе реализовано. Но сделал так...

Last edited by axm2013; 25.11.2015 at 12:41.
Old 25.11.2015, 13:09   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Join Date: 28.11.2005
Location: Москва
Blog Entries: 3
Quote:
Originally Posted by axm2013 View Post
Я как бэ в курсе. Но реализация идет Microsoft.Dynamics.AX.Fim.Dimensions.Hash::ComputeSHA1Hash т.е. сделали свою вместо использования System.Security.Cryptography.SHA1
Это просто обертка для удобства вызова:
This post has been rated by: Kabardian (2).
Old 25.11.2015, 13:36   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,996 / 3293 (117) ++++++++++
Join Date: 12.10.2004
Location: Москва
Blog Entries: 2
Quote:
Originally Posted by gl00mie View Post
Посмотрите в сторону TextBuffer::strHashKey(), если почему-то считаете, что она вам не подходит, - возьмите ту же MD5.
Интересно, а что использует TextBuffer::strHashKey() ?
Легко может оказаться, что вариант еще какой-нить криптографической функции.
Old 25.11.2015, 13:39   #10  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,996 / 3293 (117) ++++++++++
Join Date: 12.10.2004
Location: Москва
Blog Entries: 2
Quote:
Originally Posted by axm2013 View Post
Это понятно, так в общем то и сделал +- но почему от нее отказались в одном из случаев в Dynamics Ax?
Может они что то знали?
Наверняка в MS тот кто делал SHA1 был в курсе про MD5 и прочее типа того что в системе реализовано. Но сделал так...
Может быть эти функции по разному едят процессорное время ?

Я например недавно узнал, что оказывается генерация гуида может занимать существенное время в винде (до микро-миллисекунд), поэтому если идет интенсивная вставка в БД с обязательной генерацией гуида, то это может здорово просадить производительность по сравнению с использованием обычных целочисленных счетчиков.
This post has been rated by:  (1).
Old 25.11.2015, 15:18   #11  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Join Date: 28.11.2005
Location: Москва
Blog Entries: 3
Quote:
Originally Posted by Logger View Post
Интересно, а что использует TextBuffer::strHashKey() ? Легко может оказаться, что вариант еще какой-нить криптографической функции.
Я думаю, все проще, и там считается какой-нить CRC32.
Old 26.11.2015, 11:51   #12  
axm2013
Гость
 
n/a
Quote:
Originally Posted by Logger View Post
Может быть эти функции по разному едят процессорное время ?
Да видимо в этом дело имхо.
Тест показал что реализация с MD5 проигрывает SHA1 по скорости
Old 27.02.2016, 22:28   #13  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Join Date: 28.11.2005
Location: Москва
Blog Entries: 3
Quote:
Originally Posted by axm2013 View Post
Да видимо в этом дело имхо. Тест показал что реализация с MD5 проигрывает SHA1 по скорости
В действительности все с точностью до наоборот В тестах Microsoft MD5 вычисляется примерно на 43% быстрее SHA1 на объемах данных от 1 Мб, а на меньших объемах данных - примерно одинаково быстро (но SHA1 отстает).
This post has been rated by: Logger (3).
Old 29.02.2016, 09:38   #14  
axm2013
Гость
 
n/a
Quote:
Originally Posted by gl00mie View Post
В действительности все с точностью до наоборот...
Я смеюсь вам в лицо или что там у вас
добрым смехом веселой гиены

(стихи по мотивам)

Внезапно тесты:

SHA1 35
MD5 62

MD5 62
SHA1 39


Меня мало волнуют тесты от индусов MS, когда могу проверить и самостоятельно.
Old 29.02.2016, 09:43   #15  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,996 / 3293 (117) ++++++++++
Join Date: 12.10.2004
Location: Москва
Blog Entries: 2
Ну а как вы тестировали ?
Кстати, тестировать имеет смысл на небольшой длине ключа (порядка килобайта) - так как именно на такой длине вычисляется хеш для inventDim
Old 29.02.2016, 09:53   #16  
George Nordic is offline
George Nordic
Модератор
George Nordic's Avatar
Злыдни
 
4,480 / 1255 (50) ++++++++
Join Date: 17.12.2003
Location: Moscow
Blog Entries: 9
Quote:
Originally Posted by axm2013 View Post
Просто есть некие текстовые поля набор которых на вид хорошо бы представить одним полем и по идее обычную строчку с низкой энтропией можно упаковать без особых потерь.
Тогда лишитесь возможности поиска по данным полям.

С Уважением,
Георгий
Old 29.02.2016, 10:03   #17  
axm2013
Гость
 
n/a
Quote:
Originally Posted by Logger View Post
Ну а как вы тестировали ?
Кстати, тестировать имеет смысл на небольшой длине ключа (порядка килобайта) - так как именно на такой длине вычисляется хеш для inventDim
Перебирал 10 000 строк с выработкой хэша вызовом указанных выше функций.

А при чем тут InventDim? У меня другая задача в любом случае строки не мега длины де факто.

Quote:
Originally Posted by George Nordic
Тогда лишитесь возможности поиска по данным полям.
Почему?

1. взял значение полей
2. сгенерил хэш
3 осуществил поиск
4 вуаля
Old 29.02.2016, 10:09   #18  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,996 / 3293 (117) ++++++++++
Join Date: 12.10.2004
Location: Москва
Blog Entries: 2
Quote:
Originally Posted by axm2013 View Post
Перебирал 10 000 строк с выработкой хэша вызовом указанных выше функций.
Интересно.
А код как работал ?
p-code ?
CIL ?

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

см.
http://blogs.msdn.com/b/mfp/archive/...the-metal.aspx
Old 29.02.2016, 10:12   #19  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Join Date: 28.11.2005
Location: Москва
Blog Entries: 3
Quote:
Originally Posted by axm2013 View Post
Внезапно тесты:
SHA1 35
MD5 62
MD5 62
SHA1 39
- axm2013, тесты!
- 45!
- что 45?
- а что тесты?
(по мотивам известного анекдота).
Без описания методики тестирования это - внезапно мусор в теме, а не внезапно тесты.
Old 29.02.2016, 10:19   #20  
axm2013
Гость
 
n/a
Quote:
Originally Posted by gl00mie View Post
...
Без описания методики тестирования это - внезапно мусор в теме, а не внезапно тесты.
Методика см выше. Функции так же можно заметить наверху.

Мусор - это приводить непонятные тесты непонятных реализаций собратьев по разуму из солнечной Индии.
This post has been rated by: Logger (0).
Tags
hash, md5, sha1, хэш

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Неправильный тип аргумента функции преобразования S.Kuskov DAX: Программирование 3 07.02.2020 10:49
AX 2012 R2: ошибка в функции "Операции для аналитик" Kabardian DAX: Функционал 2 09.04.2014 23:56
Групповые функции в дизайнере Query Morpheus DAX: Программирование 3 28.01.2011 13:13
Advanced query range value expressions: поле таблицы - имя вcтроенной функции year(). ATimTim DAX: Программирование 12 27.03.2009 18:16
имя функции программно Alkozeltzer DAX: Программирование 2 25.07.2005 19:03

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 04:35.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.