Имя: Пароль:
1C
1С v8
Алгоритм шифрования/преобразования строки в уникальное число
,
0 mzelensky
 
30.11.12
09:38
Доброго всем! Сразу говорю, что объяснять зачем и почему довольно долго, поэтому вопросы "НАФИГА" не задавать!

Теперь вопрос - есть некая фраза (т.е. реквизит типа строка), например:

"Строка примера некой фразы"

Нужно получить уникальный числовой код этой фразы! Именно УНИКАЛЬНЫЙ!
Я думал примерно так:

Код символа = [код символа по аске] * [позиция в строке] * ( [длина строки] - [позиция в строке] ) * 10

Так получаем число для каждого символа, а затем просто складываем все это и получаем одно число (правда большое)! Основная задача - сдалать та ,чтобы сумма при сумме разряды не пересекались.
1 mzelensky
 
30.11.12
09:38
(0) в общем это то, что пришло мне на ум. Готов выслушать ваши предложения по поводу данной проблемы!
2 Лефмихалыч
 
модератор
30.11.12
09:40
Или объясняй, зачем и почему, или ветку - в печь
3 Odin1C
 
30.11.12
09:42
а вчем проблема?
есть набор символов, закодируй его как хощь, хоть в двоичной системе и будет тебе все уникальное
4 mzelensky
 
30.11.12
09:42
(2) ну начинается.
Хорошо, если очень кратко - попробуй сделать у Регистра сведений измерение с типом "Строка" более 130 символов!?
5 mzelensky
 
30.11.12
09:43
(3) так подскажи как лучше закодировать?!
6 Odin1C
 
30.11.12
09:43
А -101
Б- 102
В- 103
и тому подобное
только с количеством разрядов определись
7 mzelensky
 
30.11.12
09:45
(6) ну нарисуй мне что получится для вот этого:

"Строка примера некой фразы"
8 Лефмихалыч
 
30.11.12
09:46
(4) наркоман, штоле? зачем делать регистр сведений с таким измерением?
9 vde69
 
30.11.12
09:46
ну есть алгоритмы хеширования, конечно это не 100% уникальность но это самый правильный подход.
10 Лефмихалыч
 
30.11.12
09:46
кстати, автор, юзай MD5 или SHA
11 mzelensky
 
30.11.12
09:46
(7) еще забыл предупредить - фраза может быть на любом языке!!! И даже составной (на половину на русском, на половину на английском, например)
12 Лефмихалыч
 
30.11.12
09:47
13 mzelensky
 
30.11.12
09:47
(8) мне нужно хранить переводы фраз. Больше "зачем" не отвечаю!
14 kosts
 
30.11.12
09:48
(0)
Создать справочник.
Добавить элемент.
В наименование ввести свою фразу.
Записать элемент.

Имеем уникальный код для каждой фразы...
15 MetaDon
 
30.11.12
09:48
число в (0) будет слишком большое
хотябы [код символа по аске - мин. код символа по аске]
16 Лефмихалыч
 
30.11.12
09:49
(13) а, вот оно чо. Печатные формы.
SHA подойдет
17 Мимо Проходил
 
30.11.12
09:50
(13) Фактически у тебя 256-ричное число, тебе надо перевести его в 10-ричное и обратно. В чем проблема?
18 Лефмихалыч
 
30.11.12
09:50
(14) длина фразы может быть больше 150 симовлов. Да и хранение в любой таблице 1С все равно так или иначе упрется в ограничение кластерного индекса.
19 mzelensky
 
30.11.12
09:51
(15) ну это уже ньюансы.
20 mzelensky
 
30.11.12
09:52
(16) Верно!

А там длина конечного кода всегда одинакова? не зависимо от длины входной строки?!
21 mzelensky
 
30.11.12
09:53
(14) теряется уникальности ключа!
Т.е. теоретически может быть 2 справочника с фразой внутри "ПРИВЕТ"!

А это косяк!
22 kosts
 
30.11.12
09:54
(18) Есть хранилище.
23 kosts
 
30.11.12
09:55
(21) Ну это одна строчка на проверку уникальности при вводе
24 Лефмихалыч
 
30.11.12
09:55
(20) у меня где-то дома должна гнить на винте WSC-шка на жабаскрипте, в которой актив-икс, умеющий SHA-1 и MD5 генерить. Как раз для похожей задачи стряпал года два назад, если не забуду и найду - поделюсь.
Длина как раз всегда одинакова - 40 символов у сха и 32 у МД5
25 mzelensky
 
30.11.12
09:56
(22) ага, молодец! НУ не ужели я делаю вид полного дебила? Наверное же , если можно было использовать хранилище, то я его использовал!

Значение хранилища нельзя юзать в запросе!!!
26 mzelensky
 
30.11.12
09:57
(24) отлично - буду очень признателен!
27 mzelensky
 
30.11.12
09:58
(26) + хотя конечно я бы такой чисто на 1С-ке реализовал.

Короче говоря проссто алгоритм нужен расписанный.
28 Лефмихалыч
 
30.11.12
09:59
29 kosts
 
30.11.12
10:00
(25) Не нервируйся, по ту сторону интернета не видно кто какой делает вид )

Что ты собрался в запросах использовать?
30 Ursus maritimus
 
30.11.12
10:09
(0) А тебе потом обратно разорачивать надо будет? Или будешь потом хэш брутфорсить?
31 sapphire
 
30.11.12
10:13
(0) преобразуй md5 хешь в число
32 mzelensky
 
30.11.12
10:13
(28) я вот не увидел в описании...

этот алгоритм кодирования в обратную сторону работает?

Т.е. например я вставляю на входе строку из 1000 символов. На выходе получаю число из 40 символов. Обратно эти 40 в 1000 можно?
33 mzelensky
 
30.11.12
10:14
(30) в данной ситуации не надо - это просто ключ уникальности. Но для интереса хотелось бы и обратно попробовать.
34 Ursus maritimus
 
30.11.12
10:17
(33) Лол. МД 5 только в одну сторону.
А справочник с реквизитом строка и контролем её уникальности не?
35 zulu_mix
 
30.11.12
10:19
(32) если ты изобретешь алгоритм преобразующий 1000 символов в 40 и способный развернуть его обратно в 1000, то твой алгоритм купят все архиваторы т.к. их алгоритмы позволяют сжимать 1000 символов только в 300
36 Mikeware
 
30.11.12
10:19
(32)
Отец-грузин обьясняет своему сыну правила бизнеса:
- Берешь баран, кладешь в машин, получаешь две палка колбасы: один палка
себе, другой палка-продаешь, понял?
- Нэт.
- Обьясняю ещё раз: берешь баран, кладешь в машин, выходит два палка
колбасы: один палка себе, другой палка на базар, понял?
- Нэт.
- Обьясняю последний раз: берешь баран, кладешь в машин, получаешь две
палка колбасы: один палка себе, другой палка продаешь, понял?
- Пап. а есть такой машин, куда две палка кладешь, один баран
получается?
- Да, сынок, твой мама такой машин!!!
37 sda553
 
30.11.12
10:19
(31) я так понял, ему обратно расшифровывать надо
38 vde69
 
30.11.12
10:19
Base64 - не пойдет? 1с имеет встроеную поддержку...
39 zulu_mix
 
30.11.12
10:21
(38) ему сжать надо а не увеличить строку на 30%
пожалуй ему подойдет СжатиеДанных
40 oleg_km
 
30.11.12
10:21
(34) Двойников можно понавставлять случайно. MD5 может оказаться мало, все-таки он не исключает коллизий. Может два MD5: один от строки, другой с солью? Хотя не помню какая вероянтость коллизий, может 1: миллиард, тогда двойной MD5 будет миллиард в квадрате
41 mzelensky
 
30.11.12
10:22
(37) пока не надо. Просто интересно возможно ли это?!
42 Cube
 
30.11.12
10:22
Вот читаю, читаю и не понимаю, а чем ГУИД не угодил? Уже предлагали же... 36 символов...
43 mzelensky
 
30.11.12
10:23
(40) вроде как SHa-1 более продвинутый алгоритм
44 HeroShima
 
30.11.12
10:23
(0) уж сколько раз твердили миру. удали избыточность и всё, а иначе неуникально. или нужно заранее ограничивать диапазон значений.
45 mzelensky
 
30.11.12
10:23
(42) еще один... :(

какой нафиг ГУИД СТРОКИ?????
Создавать отдельно справочник я не хочу!
46 mzelensky
 
30.11.12
10:24
(44) ты сейчас о чем дядя? давай досвиданья!
47 vde69
 
30.11.12
10:24
(39) у него строка юникоде (разные языки) и потом ее нужно использовать как ключ (по этому это должна быть имено строка).

именно для таких случаев и используется Base64, только на вход к шифрованию нужно подавать сжатую строку (например 6 битовую)
48 Cube
 
30.11.12
10:24
(45) "Создавать отдельно справочник я не хочу!"
Тебе хранить перевод всё-равно где-то придется. А создавать РС хочешь, значит?
49 mzelensky
 
30.11.12
10:26
(48) молодец! догадался :)
50 HeroShima
 
30.11.12
10:26
(45) о том что у тебя с математикой туго совсем, тётя
51 Lama12
 
30.11.12
10:26
(10) +1.
Для вычисления можно использовать внешние компоненты.
52 Ursus maritimus
 
30.11.12
10:27
(45) Ути-пути. Справочник создавать не хочу, а кривожо_пый велосипед изобретать хочу. Любитель ручного секса?
53 Cube
 
30.11.12
10:27
(49) И? Какая разница: хранить в РС или в справочнике? В справочнике в данном случае проще.
54 oleg_km
 
30.11.12
10:29
(43) Какая разница, все равно при свертке неограниченного объема информации к фиксированному всега появляется вероятность коллизий. Например у меня блок информации 1000 бит, это 1000^2 разных значений, если хеш будет 100 бит, то есть только 100^2 вариантов хешей, т.к. в одном из ста случаев хеши будут совпадать.
55 mzelensky
 
30.11.12
10:30
(53) мне кажется в РС лучше.
56 Cube
 
30.11.12
10:31
(55) Чем? Тем что надо велосипед с квадратными колесами придумать? Заюзать ГУИД это как два пальца об асфальт...
57 HeroShima
 
30.11.12
10:32
(56) в пень гуид
58 Cube
 
30.11.12
10:33
(57) Обоснуешь?
59 vde69
 
30.11.12
10:33
(45) кстати хорошая идея (я так делал, нормально работает)

делаешь справочник с табличной частью
в табличную часть заносишь список параметров поиска,
на основании табличной части строим ХЕШ и его пишем в наименование справочника.

далее как использовать

имеем произвольный набор параметров, их по заданому алгоритму упаковываем и строим хешь - по хешу ищем элемент справочника (при необходимости создаем) и далее работаем с этим справочником.

то есть перекладываем часть расчетов на момент до выполнения запросов и сильно упрощаем сами запросы...

у меня было переменное количество параметров от 2х до 5, использовал в RLS - все летало!

аналогично можно сделаить и в сабже, просто в раблицу писать отдельные слова из фразы
60 HeroShima
 
30.11.12
10:34
(58) недосуг
61 acsent
 
30.11.12
10:36
(59) типы придумал ключи аналитики. только хэш тут лишнее
62 acsent
 
30.11.12
10:37
(61) *ты
63 Лефмихалыч
 
30.11.12
10:39
(32) да, конечно, работает. Скачал кино на работе, посчитал md5, записал на бмажку 32 символа, принес домой, развернул, смотри кино.
64 mzelensky
 
30.11.12
10:40
(59) отдельные слова не вариант. тут нужна именно фраза целиком. Т.к. одни и теже слова в разных ситуациях могут переводиться по разному.

Напрмиер в одном случае "корабль" переводится как "ship" в другом "vessel". Поэтому сложный перевод не вариант формировать по словам - приходится хранить целую фразу или предложение.
65 Лефмихалыч
 
30.11.12
10:40
(32) не нужно тебе обратно расшифровывать. В измерении будет хэш, а само значение - в ресурсе неограниченной строкой. Искать ты будешь по хэшу, а не по значению
66 mzelensky
 
30.11.12
10:40
(63) было бы здорово :)
67 vde69
 
30.11.12
10:40
(61) не лишнее,

хешь нужен для поиска существующего элемента по заранее неизвестному количеству значений неизвестного типа

делал для документооборота, прикидывал преспективы - при 500 пользователях аналитика полностью покрывала все возможные варианты доступа до 6 аналитик, а справочник в преспективе выдерживает до 10-15 аналитик
68 mzelensky
 
30.11.12
10:41
(65) я знаю. Мне в данной ситуации обратно не надо!

Просто интересно можно ли это сделать...

вообще-то где-то видел в инете преобразователи обратные.
69 acsent
 
30.11.12
10:41
Тебе надо кодирование без потерь? Смотри в сторону Сжатие.ZIP
70 acsent
 
30.11.12
10:43
(67) насколько преимущество перед регистром сведений?
71 mzelensky
 
30.11.12
10:43
(69) а причем тут сжатие зип? зип мне на выходе двоичные данные даст....причем по длине очень не маленькие.
72 HeroShima
 
30.11.12
10:44
(68) ты не то в интернете видел и не так
73 vde69
 
30.11.12
10:44
(68) да херней не майся, у тебя регист сведений приметивный тип такой длины не заиндексирует.
74 acsent
 
30.11.12
10:44
(71) Так тебе с потерями или без?
75 vde69
 
30.11.12
10:48
(70) на регистре такое просто сделать невозможно, дело в том что типы разные (разные варианты доступа в одном регистре)

например реализуй два вида доступа которые действуют или/или
1. ШтатноеРасписание + ВидДокумента + ПравоПодписи
2. ГруппаДоступа + ПравоПросмотра + ВидДокумента + РуководительАвтора

у меня это реализовывалось созданием N количества элементов и записи их в регистры а RLS был в одну строку
76 mzelensky
 
30.11.12
10:52
(74) ну вообще без хочется.
77 Лефмихалыч
 
30.11.12
10:53
(59) при таком подходе, на кой кол тебе хеш?
78 Лефмихалыч
 
30.11.12
10:53
(76) перестань этого хотеть и все получится
79 Jstunner
 
30.11.12
11:00
Для всех символов: сумма = сумма^65536 + КодСимвола(Н)
80 Jstunner
 
30.11.12
11:01
(79) *
81 155153144627
 
30.11.12
11:54
wiki:RC6
DynaCrypt в 1С++ по такому алгоритму шифрует и расшифровывает.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс