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

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

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

Author24 — интернет-сервис помощи студентам
Итак в продолжение темы "Как работать с 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
12837 / 8864 / 1317
Регистрация: 21.01.2016
Сообщений: 33,217
06.05.2016, 14:14 2
Цитата Сообщение от 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  [ТС] 3
Цитата Сообщение от Usaga Посмотреть сообщение
Это потому, что вопрос глупый. IntPtr - это uint или ulong в зависимости от архитектуры (х86 или х64) твоего приложения. А подсчитать MD5 для uint и без гугла можно.
Разумеется имеется ввиду указатель на char. Я же сказал что получаю указатель из SecureString.

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

Не по теме:

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



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

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

Не по теме:

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

Не по теме:

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


Цитата Сообщение от LeniumSoft Посмотреть сообщение
Ты этот SecureString где получаешь?
Где у тебя пароль вводится?
PasswordBox из WPF.
0
 Аватар для LeniumSoft
1454 / 846 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
06.05.2016, 14:40 11
Цитата Сообщение от 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  [ТС] 12
LeniumSoft, вы с Rius-ом меня в конец запутали!!! Rius, Прокомментируйте пожалуйста!!! Потому что блин получается противоречие. Он говорит что строку (экземпляр) могут перехватить в памяти. А это типа уязвимость.

Добавлено через 1 минуту
Потому что хэш то он тоже не сразу получается. Сначала нужен экземпляр обычной строки полученной из SecureString. Так вот ее то вроде как и могут перехватить прежде чем ее уничтожит сборщик мусора.
0
Эксперт .NET
 Аватар для Rius
11413 / 7292 / 1615
Регистрация: 25.05.2015
Сообщений: 22,048
Записей в блоге: 14
06.05.2016, 15:25 13
Dark Byte, для решения этой возможной уязвимости и сделан SecureString:
Если создать переменную типа String с паролем, она останется в памяти и может быть перехвачена. Да, там есть уборщик мусора.
Но успеть найти строку до уборки, или до очистки памяти переменной, или вообще что-то искать - все варианты
возможны.
У SecureString есть возможность явно контролировать время жизни переменной, а у String - нет.
В этом LeniumSoft ошибается или упрощает.
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
06.05.2016, 16:48  [ТС] 14
Таки что мне то делать? Как рассчитать хэш имея только указатель на данные?
0
Эксперт .NET
 Аватар для Rius
11413 / 7292 / 1615
Регистрация: 25.05.2015
Сообщений: 22,048
Записей в блоге: 14
06.05.2016, 18:11 15
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  [ТС] 16
Rius, а где реализация DB_CalculateHash? Я о том и спрашиваю где мне взять реализацию алгоритма хэширования в нативном коде? Это в .NET она уже реализована встроенная, а в C++ я хз...
0
Эксперт .NET
 Аватар для Rius
11413 / 7292 / 1615
Регистрация: 25.05.2015
Сообщений: 22,048
Записей в блоге: 14
06.05.2016, 18:19 17
Dark Byte, ищите, всё есть в этих ваших интернетах.
MD5 Hash посредством WinApi
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
06.05.2016, 18:30  [ТС] 18
Цитата Сообщение от Rius Посмотреть сообщение
Dark Byte, ищите, всё есть в этих ваших интернетах.
MD5 Hash посредством WinApi
Какой ужас!!! Меня всегда просто пугают программы на C / C++ тем более WinAPI. После C# дико на это смотреть. Короче я займусь этим в самом конце если время останется. Сейчас еще есть масса других задач по этому проекту...
0
Эксперт .NET
 Аватар для Rius
11413 / 7292 / 1615
Регистрация: 25.05.2015
Сообщений: 22,048
Записей в блоге: 14
07.05.2016, 20:45 19
Тем, кто в будущем задумается над этой темой, но не для Dark Byte, прилагаю рабочий пример.

Безопасное получение хэша пароля, заданного через указатель из SecureString
Вложения
Тип файла: zip DarkByte.zip (56.0 Кб, 52 просмотров)
1
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
09.05.2016, 12:33  [ТС] 20
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
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Лучшие практики оптимизации Docker Image
Mr. Docker 13.03.2025
Размер Docker-образа влияет на множество аспектов работы с контейнерами. Чем больше образ, тем дольше его загрузка в реестр и выгрузка из него. Для команд разработки, работающих с CI/ CD пайплайнами,. . .
Вопросы на собеседовании по Docker
Mr. Docker 13.03.2025
Ты сидишь напротив технического специалиста, и вдруг звучит вопрос про Docker Swarm или многоэтапные сборки. Пот на лбу? Не переживай, после этой статьи ты будешь готов ко всему! Эта статья будет. . .
Поиск текста в сносках : замена дефиса на тире или тире на дефис...
РоΜа 13.03.2025
Нужно было найти текст в сносках и заменить. Почему-то метод селекшн не сработал. . . пришлось гуглить. найденный на форумвба код пришлось править. Смысл - заменяет в сносках дефисы и тире на нужные. . . .
Real PATH definitions in bash scripts
jigi33 13.03.2025
Как поймать путь и путь к директории относительно запускаемого файла в BASH 1. поймать путь через вывод $(pwd) 2. более правильно - на основе realpath (см. скриншот)
Django или Flask: что выбрать для веб-разработки на Python
py-thonny 13.03.2025
Django – это высокоуровневый фреймворк, который придерживается философии "всё включено". Он предоставляет разработчику готовые решения для большинства типичных задач веб-разработки: от аутентификации. . .
Непрерывное развертывание в Java с Kubernetes
Javaican 13.03.2025
Чем так привлекателен Kubernetes для развертывания Java-приложений? Этот оркестратор контейнеров позволяет автоматизировать развертывание, масштабирование и управление контейнеризированными. . .
Предотвращение XSS, CSRF и SQL-инъекций в JavaScript
run.dev 13.03.2025
JavaScript занимает первые позиции среди языков веб-разработки, но его распространенность делает его привлекательной целью для злоумышленников. Межсайтовый скриптинг (XSS), межсайтовая подделка. . .
PHP 8: JIT-компиляция и улучшение производительно­сти
Jason-Webb 13.03.2025
PHP никогда не славился своей скоростью. Многие сталкивались с проблемами производительности при работе со сложными вычислениями или обработкой больших объемов данных. Традиционная модель выполнения. . .
Сериализация данных с Apache Avro в Kafka
Javaican 12.03.2025
Apache Kafka стала одним из ключевых решений для работы с большими потоками данных. Однако с ростом объемов передаваемых данных возникает проблема: как эффективно сериализовать и десериализовать. . .
Создание потребителей Kafka с помощью Reactor Kafka
Javaican 12.03.2025
Reactor Kafka — это библиотека, объединяющая Apache Kafka с реактивным программированием на базе Project Reactor. Такое сочетание позволяет строить неблокирующие, асинхронные приложения с контролем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru