Имя: Пароль:
1C
1С v8
Странности в расчете хэша
0 abask
 
28.04.25
22:32
Пытаюсь в коде спрятать пароль

СтранноеЧисло = 3 + 7 * 2 / 8 + 5 - 3;
Хеш = Новый ХешированиеДанных(ХешФункция.MD5);
Хеш.Добавить(Строка(СтранноеЧисло));    
Возврат Сред(Base64Строка(Хеш.ХешСумма), 2, 16);

каждые несколько дней результат меняется

платформа 8.5

это глюк новой платформы или я чего-то не знаю про хэширование?



какие еще могут быть идеи спрятать пароль не использую хэш?
1 abask
 
28.04.25
22:44
пока сделал так

    СтранноеЧисло = 1 + 4 * 3 / 6 + 3 - 2 + 236;
    Поток = Новый ПотокВПамяти();
    Запись = Новый ЗаписьДанных(Поток);
    Запись.ЗаписатьСтроку(Строка(СтранноеЧисло));
    ДД = Поток.ЗакрытьИПолучитьДвоичныеДанные();    
    
    Возврат Base64Строка(ДД);
2 Волшебник
 
29.04.25
09:38
Пароли не надо прятать в код.
Сохраните его в файл, который зашифруйте ключом, а файл положите на сетевой ресурс с ограниченным доступом.
Для расшифровки нужен ключ, который вводится пользователем на время сеанса.
Можно добавить двухфакторную авторизацию.
3 mmg
 
29.04.25
09:49
(2) Пароли вообще не надо хранить. Хранить надо хеш-суммы
4 mmg
 
29.04.25
10:10
(0) Так пробуй SHA вместо MD5. Но скорее всего у тебя вот это меняется
Строка(СтранноеЧисло)
А так хранение хешей - самая здравая идея
5 Волшебник
 
29.04.25
10:16
(0) Почитайте мысли Qwen на эту тему, может что-то окажется полезным:
https://chat.qwen.ai/s/2f815093-ea29-4ba9-a63f-9c9ac3b8ce4a?fev=0.0.85

или мысли DeepSeek
https://disk.yandex.ru/d/dwxbT23oGdqULg
6 ass1c
 
29.04.25
10:12
(0) Попробуй так
СекретнаяСтрокаMD5 = ОбщегоНазначения.КонтрольнаяСуммаСтрокой("СекретнаяСтрока");

Функция КонтрольнаяСуммаСтрокой(Знач Данные, Знач Алгоритм = Неопределено) Экспорт
	
	Если Алгоритм = Неопределено Тогда
		Алгоритм = ХешФункция.MD5;
	КонецЕсли;
	
	ХешированиеДанных = Новый ХешированиеДанных(Алгоритм);
	Если ТипЗнч(Данные) <> Тип("Строка") И ТипЗнч(Данные) <> Тип("ДвоичныеДанные") Тогда
		Данные = ЗначениеВСтрокуXML(Данные);
	КонецЕсли;
	ХешированиеДанных.Добавить(Данные);
	
	Если ТипЗнч(ХешированиеДанных.ХешСумма) = Тип("ДвоичныеДанные") Тогда 
		Результат = СтрЗаменить(ХешированиеДанных.ХешСумма, " ", "");
	ИначеЕсли ТипЗнч(ХешированиеДанных.ХешСумма) = Тип("Число") Тогда
		Результат = Формат(ХешированиеДанных.ХешСумма, "ЧГ=");
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции
7 mmg
 
29.04.25
10:34
(0) Видимо, ты в принципе неправильно делаешь. Надо так.
1. Придумать пароль
2. Вычислить хеш от пароля
3. Записать хеш в код и проверять с его помощью пароль, вводимый пользователем. Т.е. вычисляешь хеш от введенного пользователем пароля и сравниваешь его с сохраненным. Если совпадают, значит пользователь ввел правильный пароль. Таким образом, ты не хранишь пароль (получить пароль из хеша нельзя), но проверить можешь
8 abask
 
29.04.25
10:40
(2) задача спрятать пароль от самого пользователя
это мобильное приложение - front, которое подключается к back

(3) сервер ждет на входе именно пароль

(4) пробовал разные алгоритмы - результат тот же

вопрос был о том, может ли хэширование так себя вести или это глюк?
9 mmg
 
29.04.25
10:40
(8) Тогда это смешно. Ты не хочешь писать в коде
пароль = "123";
а хочешь как-то запутать ситуацию? Так знай, сейчас любой, начиная со старшей группы детского сада, с помощью ИИ распутает то, что ты запутал за 2 секунды
10 mmg
 
29.04.25
10:49
(8) Можно предположить, что на одной машине
Строка(СтранноеЧисло) дает "6,75"
а на другой "6.75"

А 1 + 4 * 3 / 6 + 3 - 2 + 236=240
на любой машине будет 240
11 H A D G E H O G s
 
29.04.25
10:52
(9) Вооот в этой dll спрятан пароль
https://disk.yandex.ru/d/2FGyQLAKXPdXZw

хотелось бы его узнать
12 mmg
 
29.04.25
10:57
(11) Так он не в dll прячет
13 H A D G E H O G s
 
29.04.25
11:01
(12) Надо в dll и динамически муторно формировать, выщелкивая из алфавита, а не строкой хранить. Поняяятно, что спеца это не остановит, но этих спецов 1 на 10000 и ему просто лениво будет возится с поделием (0)
14 abask
 
29.04.25
11:21
(12) там только байт-код, доступа к тексту модуля нет
15 abask
 
29.04.25
11:22
(10) на одном и том же устройстве через несколько дней выдает другой хэш
16 oleg_km
 
29.04.25
13:32
(15) Полагаю, что при делении иногда иногда возникает скажем так сотый знак после запятой. Попробуй для отладки позаписывать вычисленное значение
17 Garykom
 
гуру
29.04.25
13:42
Интересно ТС понимает отличие
Строка(СтранноеЧисло)
от
Формат(СтранноеЧисло, "ЧГ=")

?
18 Кирпич
 
29.04.25
14:23
(0) md5 всегда один и тот же от одной и той же строки. Не бывает по другому. Входная строка у тебя меняется значит.
19 Garykom
 
гуру
29.04.25
14:47
(18) там у него несколько засад
1. деление может давать разное в дробных
2. неразрывные пробелы (разделитель групп) когда число из строки
3. десятичный разделитель когда число из строки
и т.д.
20 программистище
 
29.04.25
15:02
а в чем суть в вычислении одного и того же выражения, а не изначально задать ключ
21 abask
 
29.04.25
17:28
идеи понятны протестирую спасибо
22 Кирпич
 
30.04.25
10:16
И зачем чего-то на чего-то там умножать делить и складывать? Почему просто не написать число сразу:)
AdBlock убивает бесплатный контент. 1Сергей