Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001

Безопасное получение хэша пароля, заданного через указатель из SecureString

06.05.2016, 14:01. Показов 3159. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Итак в продолжение темы "Как работать с SecureString?" вопрос следующий: как рассчитать md5-хэш из указателя IntPtr или обычного unsafe указателя? (получим из SecureString) Я использую класс MD5 для расчета хэша. Собственно вариантов два: попробовать как то скормить ему указатель (я пока не нашел методом принимающих указатели) или же найти какую то другую библиотеку которая умеет считать хэши. Подскажите пожалуйста. (А то меня Rius достал уже! )

Добавлено через 5 минут
P.S. гугл по запросу "c# md5 hash from pointer" ничего внятного ответить не смог.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.05.2016, 14:01
Ответы с готовыми решениями:

Получение страницы через cURL с учетом хэша в ссылке
Загруш курлом страницу с гет параметрами, все получается. Но теперь появилась страница еще и с параметром после "#", а при...

Использование MD5 для проверки хэша пароля с MySQL
Здравствуйте форумчане, у меня возникла такая проблема, надо чтобы пароль введенный в textbox шифровался в md5 и уже этот хэш отправлялся...

Получение MD5 хэша файла
Никак не могу разобраться в многочисленных примерах, как реализовать получение хэш суммы MD5 файла, хэш текста получить могу, а файла нет:(

20
Эксперт .NET
 Аватар для Usaga
14297 / 9382 / 1353
Регистрация: 21.01.2016
Сообщений: 35,370
06.05.2016, 14:14
Цитата Сообщение от Dark Byte Посмотреть сообщение
гугл по запросу "c# md5 hash from pointer" ничего внятного ответить не смог
Это потому, что вопрос глупый. IntPtr - это uint или ulong в зависимости от архитектуры (х86 или х64) твоего приложения. А подсчитать MD5 для uint и без гугла можно.
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
06.05.2016, 14:20  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Это потому, что вопрос глупый. IntPtr - это uint или ulong в зависимости от архитектуры (х86 или х64) твоего приложения. А подсчитать MD5 для uint и без гугла можно.
Разумеется имеется ввиду указатель на char. Я же сказал что получаю указатель из SecureString.

Добавлено через 3 минуты
Usaga, не притворяйтесь что не поняли вопрос. Естественно считать хэш надо не самого указателя, а того что по нему записано.
0
Эксперт .NET
 Аватар для Usaga
14297 / 9382 / 1353
Регистрация: 21.01.2016
Сообщений: 35,370
06.05.2016, 14:22
Dark Byte, я хочу сказать, что если нужно подсчитать хэш только для указателя, а не для данных на которые он указывает, то достаточно просто привести указатель к uint или ulong. Но это тупость. мне кажется, что ты неправильно вопрос поставил...
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
06.05.2016, 14:23  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Dark Byte, я хочу сказать, что если нужно подсчитать хэш только для указателя, а не для данных на которые он указывает, то достаточно просто привести указатель к uint или ulong. Но это тупость. мне кажется, что ты неправильно вопрос поставил...
Цитата Сообщение от Dark Byte Посмотреть сообщение
Usaga, не притворяйтесь что не поняли вопрос. Естественно считать хэш надо не самого указателя, а того что по нему записано.
Кому может прийти в голову рассчитывать хэш самого указателя, а не того что по нему записано? Мне казалось это очевидно.
0
Эксперт .NET
 Аватар для Usaga
14297 / 9382 / 1353
Регистрация: 21.01.2016
Сообщений: 35,370
06.05.2016, 14:24
Dark Byte, тогда смотри в сторону маршалинга - копируешь данные в управляемый массив и уже над ним сотворяешь MD5.
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
06.05.2016, 14:26  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Dark Byte, тогда смотри в сторону маршалинга - копируешь данные в управляемый массив и уже над ним сотворяешь MD5.
Так в этом вся соль. Я же пытаюсь закрыть описанную Rius уязвимость. Чтобы пароль никогда не попадал в управляемый код. А так он попадет...
0
Эксперт .NET
 Аватар для Usaga
14297 / 9382 / 1353
Регистрация: 21.01.2016
Сообщений: 35,370
06.05.2016, 14:26
Цитата Сообщение от Dark Byte Посмотреть сообщение
Кому может прийти в голову рассчитывать хэш самого указателя, а не того что по нему записано?
Я тоже решил, что это идиотизм, но именно так ты вопрос и поставил
0
 Аватар для LeniumSoft
1454 / 847 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
06.05.2016, 14:26
Цитата Сообщение от Dark Byte Посмотреть сообщение
не притворяйтесь что не поняли вопрос.

Не по теме:

Чего ты такой агрессивный? Пойди валерьяночки накапай себе!



Ты этот SecureString где получаешь?

Где у тебя пароль вводится?
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
06.05.2016, 14:28  [ТС]
Цитата Сообщение от LeniumSoft Посмотреть сообщение

Не по теме:

Чего ты такой агрессивный? Пойди валерьяночки накапай себе!

Не по теме:

Сроки давят на нервы. :D


Цитата Сообщение от LeniumSoft Посмотреть сообщение
Ты этот SecureString где получаешь?
Где у тебя пароль вводится?
PasswordBox из WPF.
0
 Аватар для LeniumSoft
1454 / 847 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
06.05.2016, 14:40
Цитата Сообщение от Dark Byte Посмотреть сообщение
PasswordBox из WPF.
Тебе никто не запрещает получать нормальную строку с паролем.
Просто нежелательно хранить эту строку в переменной или свойстве объекта.
Для хранения в качестве свойства объекта создали SecureString.
https://arlvin.wordpress.com/2... ma-part-1/

В своих методах можешь получать строку и делать с ней любые манипуляции. Метод отработает, строки не станет.
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
06.05.2016, 14:48  [ТС]
LeniumSoft, вы с Rius-ом меня в конец запутали!!! Rius, Прокомментируйте пожалуйста!!! Потому что блин получается противоречие. Он говорит что строку (экземпляр) могут перехватить в памяти. А это типа уязвимость.

Добавлено через 1 минуту
Потому что хэш то он тоже не сразу получается. Сначала нужен экземпляр обычной строки полученной из SecureString. Так вот ее то вроде как и могут перехватить прежде чем ее уничтожит сборщик мусора.
0
Эксперт .NET
 Аватар для Rius
13127 / 7687 / 1676
Регистрация: 25.05.2015
Сообщений: 23,456
Записей в блоге: 14
06.05.2016, 15:25
Dark Byte, для решения этой возможной уязвимости и сделан SecureString:
Если создать переменную типа String с паролем, она останется в памяти и может быть перехвачена. Да, там есть уборщик мусора.
Но успеть найти строку до уборки, или до очистки памяти переменной, или вообще что-то искать - все варианты
возможны.
У SecureString есть возможность явно контролировать время жизни переменной, а у String - нет.
В этом LeniumSoft ошибается или упрощает.
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
06.05.2016, 16:48  [ТС]
Таки что мне то делать? Как рассчитать хэш имея только указатель на данные?
0
Эксперт .NET
 Аватар для Rius
13127 / 7687 / 1676
Регистрация: 25.05.2015
Сообщений: 23,456
Записей в блоге: 14
06.05.2016, 18:11
SecureString позволяет получить и указатель на данные, и их количество.
Потом это через PInvoke передаётся в нативную DLL, вместе с буфером под результат.
Код в DLL вычисляет результат и помещает в выходной буфер.
Управляемый код обрабатывает буфер и получает из него хэш в удобочитаемом виде.

Несколько набросков кода:
C++
1
2
3
4
5
6
7
8
9
#pragma once
 
#ifdef DARKBYTELIB_EXPORTS
#define DARKBYTELIB_API __declspec(dllexport)
#else
#define DARKBYTELIB_API __declspec(dllimport)
#endif
 
extern "C" DARKBYTELIB_API BOOL DB_CalculateHash(BYTE *password, INT32 passwordLength, char *hash, int hashLength);
C#
1
2
[DllImport("DarkByteLib.dll", SetLastError = true, CharSet = CharSet.Ansi, EntryPoint = "DB_CalculateHash", CallingConvention = CallingConvention.Cdecl)]
        private static extern Boolean DB_CalculateHash(IntPtr lpPassword, Int32 passwordLength, StringBuilder hash, Int32 hashLength);
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
IntPtr passwordPointer = Marshal.SecureStringToGlobalAllocUnicode(password);
            StringBuilder hashBuilder = new StringBuilder(256);
            string hashString = String.Empty;
 
            try
            {
                if (Hasher.DB_CalculateHash(passwordPointer, password.Length, hashBuilder, hashBuilder.Capacity))
                {
                    hashString = hashBuilder.ToString();
                }
                else
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error());
                }
            }
            finally
            {
                Marshal.ZeroFreeGlobalAllocUnicode(passwordPointer);
            }
 
            this.HashedPassword = hashString;
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
06.05.2016, 18:15  [ТС]
Rius, а где реализация DB_CalculateHash? Я о том и спрашиваю где мне взять реализацию алгоритма хэширования в нативном коде? Это в .NET она уже реализована встроенная, а в C++ я хз...
0
Эксперт .NET
 Аватар для Rius
13127 / 7687 / 1676
Регистрация: 25.05.2015
Сообщений: 23,456
Записей в блоге: 14
06.05.2016, 18:19
Dark Byte, ищите, всё есть в этих ваших интернетах.
MD5 Hash посредством WinApi
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
06.05.2016, 18:30  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Dark Byte, ищите, всё есть в этих ваших интернетах.
MD5 Hash посредством WinApi
Какой ужас!!! Меня всегда просто пугают программы на C / C++ тем более WinAPI. После C# дико на это смотреть. Короче я займусь этим в самом конце если время останется. Сейчас еще есть масса других задач по этому проекту...
0
Эксперт .NET
 Аватар для Rius
13127 / 7687 / 1676
Регистрация: 25.05.2015
Сообщений: 23,456
Записей в блоге: 14
07.05.2016, 20:45
Тем, кто в будущем задумается над этой темой, но не для Dark Byte, прилагаю рабочий пример.

Вложения
Тип файла: zip DarkByte.zip (56.0 Кб, 52 просмотров)
1
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
09.05.2016, 12:33  [ТС]
Rius, вы же не надеялись что я не посмотрю что там? спс думаю мне это подойдет!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.05.2016, 12:33
Помогаю со студенческими работами здесь

Получение доступа к методам дочернего класса через указатель на родительский, хранимый в vector
Была подобная тема с list'ом, но решение, предложенное там, мне не помогло. Соль проблемы заключается в следующем: имеется vector,...

Безопасное хранение файлов или безопасное подключение к БД
Возник такой вопрос. Подключение к БД делаю с помощью include который загружает файл содержащий строку подключения с логином и паролем....

Указатель типа void. Использование косвенного связывания через универсальный указатель
Необходимо использовать косвенного связывания через универсальный указатель, примерный вид: struct обобщение{ключ; void* на что угодно}...

Безопасное соединение через Delphi
Всем привет. Пишу платную программу, суть ее в парсинги информации с txt файла лежащие у меня на юкоз хостинге. Но проблема в том что люди...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru