|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.08.2010, 21:31 | #1 |
Форумчанин
Регистрация: 15.11.2007
Сообщений: 229
|
Шифрование данных средствами Delphi
Добрый день!
Встала такая задача: зашифровать некоторую информацию с помощью пароля. Знаю что таких тем куча, но просидев в гугле два дня и день на форумах в поиске ответа так и не пришёл к результату. Способов нашёл большое множество, читал и про CryptoAPI и про хэш-функции, читал про шифрование с помощью xor, но все они так или иначе обладали некоторыми недостатками, из-за чего поиск продолжался дальше. Задача стоит самая тривиальная: Есть пароль, который знает пользователь, есть информация, которая должна быть зашифрована с помощью этого пароля. Всё это должно сохраняться в файл. Соответственно пароль тоже должен храниться в файле, для определения правильности ввода пароля. Информации уже накопилось столько что не знаю уже что и выбрать, каким способом лучше шифровать, в каком виде сохранять пароль и прочее. Т.е. задача состоит в том, чтобы выбрать лучший алгоритм шифрования данных, хранение пароля, и реализации этого в Delphi. Уверен что это тема не одного меня интересует, или интересовала, и хотелось бы узнать мнение тех, кто уже сталкивался с этим и нашёл какие-то конкретные способы реализации данной задачи. Важно высокая взломо-устойчивость.
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
|
11.08.2010, 22:38 | #2 | ||
Форумчанин
Регистрация: 29.12.2007
Сообщений: 137
|
Цитата:
1. Пытаемся расшифровать тем паролем, что ввел пользователь, и проверяем контрольную сумму результата. Если она совпадает с ранее сохраненной - пароль верный, и расшифрованные данные валидные, иначе - у нас на выходе абра-кадабра и пароль неверен. 2. Храним в файле вместо самого пароля его хеш-дайджест (MD5, SHA-1), при расшифровке юзер вводит пароль, считаем его хеш, если он не совпадает с тем, что в файле - даже не пытаемся расшифровать а сразу пишем что пароль не верный Первый способ лучше защищает от перебора, т.к. операция расшифровки не такая уж быстрая, и перебор займет много времени, второй лучше тем, что более оптимальный - пользователю не нужно долго ждать, чтобы потом узнать что он ошибся при вводе пароля. Вот и все. Для шифрования - CryptoAPI, любой симметричный алгоритм (его выбор не играет роли в твоем случае, RC2 или RC4 проще всего т.к. поддерживаются дефолтным криптопровадером), для контрольной суммы - CRC32. Пароль используется для генерации ключа при зашифровке и расшифровке - функция CryptDeriveKey Цитата:
http://www.delphikingdom.com/asp/vie...catalogid=1271 Последний раз редактировалось Ins; 11.08.2010 в 22:56. |
||
12.08.2010, 00:27 | #3 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
Пароль нигде не должен храниться! да и со всем остальным сказанным Ins я полностью согласен! Разве что добавлю - я бы лично не стал связываться с CryptoAPI (но это, скажем, моё личное предпочтение), ибо есть куча бесплатных библиотек реализующих сильную криптографию — можно брать любую. |
|
12.08.2010, 01:19 | #4 |
Форумчанин
Регистрация: 15.11.2007
Сообщений: 229
|
2 Ins: Извините, не правильно выразился. Я это и имел ввиду, что в файле должен храниться пароль, но не в откртом в виде, а либо его хэш-отпечаток, либо ещё что-то. Но чтобы можно было проверить правильность.
Статью читал, но не на этом сайте. На счёт СryptoAPI читал не самые лучшие отзывы, и хотел бы услышать ваши. Писали что реализация Microsoft оставляет желать лучшего. Это правда? Мне нужна очень хорошая шифрация данных. Чтобы шанс на влом этих данных был минимален. Примерно как это делается в WinRAR. Т.е. защищенность данных зависит от пароля. 2 Serge_Bliznykov: Чем вызванно данное предпочтение. И если вы уже сталкивались с какими-нибудь сторонними библиотеками, то можете посоветовать какую-нибудь?
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
|
12.08.2010, 01:24 | #5 | ||
Форумчанин
Регистрация: 29.12.2007
Сообщений: 137
|
Цитата:
Цитата:
Последний раз редактировалось Ins; 12.08.2010 в 01:28. |
||
12.08.2010, 01:43 | #6 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
почитайте интересное обсуждение тут на форуме:
Способ шифрования по поводу библиотек - тут на форуме (например, мой пост #2) а по поводу моего отношения CryptoAPI: 1) это скорее неприязнь, чем недоверие. Сомнений в том, что там криптография реалзизована грамотно - у меня нет. Другой вопрос, что там могут быть дыры для спецслужб... но это другой вопрос. Да и доказательств этого вроде бы тоже нет. 2) я практического опыта использования CryptoAPI не имею... 3) основной причиной неиспользования стало то, что CryptoAPI может быть отключено/отсутствовать на разных версиях/дистрибутивах Windows (а нужно было, чтобы программа работала не только на Win NT/Win 2000/Win XP, но и на Windows 98... именно поэтому в реальном проекте и было выбрано шифрование через Delphi Encryption Compendium... Поэтому, возможно, что моё отношение к CryptoAPI и ошибочно/не справедливо... вполне даже может быть. |
12.08.2010, 01:46 | #7 | |
Форумчанин
Регистрация: 29.12.2007
Сообщений: 137
|
Цитата:
Последний раз редактировалось Ins; 12.08.2010 в 01:48. |
|
12.08.2010, 02:58 | #8 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Вот это точно неверно. Провайдер, который вы хотите, может не стоять - это да. Но чтобы весь КриптоАПИ? А сама система-то как без него работать будет?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
12.08.2010, 03:38 | #9 |
220400
Форумчанин
Регистрация: 21.05.2010
Сообщений: 726
|
Реализуйте своими силами какой нибудь алгоритм шифрования, например Blowfish.
PS: Раньше был надежным алгоритм DES, но его уже легко взломать.
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам. Не учите человека, если вы не его учитель. |
12.08.2010, 04:11 | #10 |
Форумчанин
Регистрация: 15.11.2007
Сообщений: 229
|
2 Sparkman: Ну не обязательно реализовывать своими силами, по ссылкам выше дан компонент Delphi Encryption Compendium, там уже эти алгоритмы реализованы, и даны исходники, если нужно, то можно вытащить их оттуда.
P.S. ИМХО, для взятия хэша думаю брать алгоритм SHA-1, а для шифрования Rijndael, поскольку они являются более устойчивыми к взлому.
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Шифрование данных [обсуждение] | Lime | Свободное общение | 25 | 23.06.2010 15:19 |
2. Составить однотабличную базу данных средствами Delphi | bestlover | Помощь студентам | 4 | 18.06.2010 08:48 |
Шифрование данных | didar_ | Общие вопросы Delphi | 2 | 07.11.2009 12:24 |
Шифрование данных | frayerok | Общие вопросы C/C++ | 0 | 20.10.2008 22:35 |
jpg в базе данных средствами ADO | SSSergey | БД в Delphi | 5 | 11.06.2007 12:17 |