Что нового

[Compiled] SavePass - сохранение аккаунтов в зашифрованный файл

Автор
xklx

xklx

Новичок
Сообщения
50
Репутация
3
Обновил
  • Добавил кнопку генерации пароля при изменении записи
  • Отключена возможность выбора записи в главном окне при создании/редактировании записей
  • Добавлено оповещение о попытке удалить запись
  • Многочисленные правки кода и доработки
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
нашел еще косяк. смотри видео. будет не понятно, объясню
http://yadi.sk/d/ynaPwh_j7FFP2
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
joiner сказал(а):
нашел еще косяк
Интересно, у меня такого нет если все делать как на видео.
OffTopic:
Может быть у вас ОС'ь какая ни будь плоховатая, везде баги находит :smile:

xklx
Уважаемый вы мой :smile: можно еще раз попросить показать файл .au3(исходник) из вашей "супер засекреченной лаборатории" :D


Добавлено:
Сообщение автоматически объединено:


xklx, может быть при взаимодействии с элементом ListView использовать проверку на то что есть ли выделенный пункт или нет, и только потом активировать кнопки изменить|удалить.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
MnM [?]
Интересно, у меня такого нет если все делать как на видео.
если хотя бы раз было такое значит стоит пересмотреть код. или нет?
 
Автор
xklx

xklx

Новичок
Сообщения
50
Репутация
3
joiner [?]
нашел еще косяк. смотри видео. будет не понятно, объяснюhttp://yadi.sk/d/ynaPwh_j7FFP2

Ну я незнаю правильно ли это называть "косяком"
Просто как я и говорил шифрование происходит с помощью ключа состоящий из 3 частей, одна из которых является сам пароль который вводится для доступа к введенным записям.
И получается когда мы входим в программу с неправильным паролем мы видим не расшифрованную запись. И когда ты редактируешь такую запись ты добавляешь к не размеченной не расшифрованной записе ещё информацию, тем самым когда сохраняешь ты записываешь в файл запись с уже новым ключом.





Добавлено:
Сообщение автоматически объединено:

MnM [?]
xklx, может быть при взаимодействии с элементом ListView использовать проверку на то что есть ли выделенный пункт или нет, и только потом активировать кнопки изменить|удалить.

Да ты прав, я для кнопки изменить сделал эту проверку, а вот про кнопку удалить забыл.
Исправил. Перезалил.

P.S А что так исходником заинтересован? Просто он в неком черновом варианте, он не готов для паблика) да и каждый день его дорабатываю на работе

OffTopic:

:IL_AutoIt_1: Поеду-ка я домой, нефиг в пятницу засиживаться на работе!
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
xklx [?]
Просто он в неком черновом варианте
Тестировать глюки EXE-шника не всякому по душе, когда легче в течении часа написать свой вариант без единого глюка. Но обсуждать алгоритм намного продуктивней, при этом учатся все, и подстёгивается соревновательный процесс. В вашем случае, пользователи форума методом тыка выявляют ошибки, а вы накладываете кривые заплатки. Мы могли бы вам сразу показать правильный стиль программирования и это было бы для вас продуктивнее.

Вот GUI:
Код:
#include <EditConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>

$hGui = GUICreate('Аккаунты', 510, 330)
$treeview = GUICtrlCreateTreeView(10, 5, 180, 280, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)

$iBtnAdded = GUICtrlCreateButton('Добавить', 10, 290, 55, 30)
$iBtnChange = GUICtrlCreateButton('Изменить', 70, 290, 55, 30)
$iBtnDelete = GUICtrlCreateButton('Удалить', 130, 290, 55, 30)

GUICtrlCreateLabel('Сайт:', 210, 7, 50, 17)
GUICtrlCreateLabel('Mail:', 210, 37, 50, 17)
GUICtrlCreateLabel('Логин:', 210, 67, 50, 17)
GUICtrlCreateLabel('Пароль:', 210, 97, 50, 17)
GUICtrlCreateLabel('Комментарии:', 210, 125, 100, 17)

$iSite = GUICtrlCreateInput('', 260, 5, 240, 22)
$iMail = GUICtrlCreateInput('', 260, 35, 240, 22)
$iLogin = GUICtrlCreateInput('', 260, 65, 240, 22)
$iPass = GUICtrlCreateInput('', 260, 95, 180, 22)

$iEdit = GUICtrlCreateEdit('' & @CRLF, 210, 150, 290, 170, $ES_AUTOVSCROLL + $WS_VSCROLL + $ES_NOHIDESEL + $ES_WANTRETURN)


$iBtnShow = GUICtrlCreateButton('Показать', 445, 95, 55, 22)

GUISetState()
While 1
	Switch GUIGetMsg()
		Case $iBtnAdded
			$sSite = GUICtrlRead($iSite)
			If StringLen($sSite) < 5 Then
				MsgBox(0, 'Сообщение', 'Укажите сайт', 0 , $hGui)
				ContinueLoop
			EndIf
			$sMail = GUICtrlRead($iMail)
			; If StringLen($sMail) < 5 Then
				; MsgBox(0, 'Сообщение', 'Укажите почтовый ящик', 0 , $hGui)
				; ContinueLoop
			; EndIf
			$sLogin = GUICtrlRead($iLogin)
			If StringLen($sLogin) < 5 Then
				MsgBox(0, 'Сообщение', 'Укажите логин', 0 , $hGui)
				ContinueLoop
			EndIf
			$sPass = GUICtrlRead($iPass)
			If StringLen($sPass) < 5 Then
				MsgBox(0, 'Сообщение', 'Укажите пароль', 0 , $hGui)
				ContinueLoop
			EndIf
			 $Data = _Crypt_EncryptData($sSite & @LF & $sMail & @LF & $sLogin & @LF & $sPass, $sPassKey, $CALG_AES_256)
		Case $iBtnChange
			GUICtrlSetData($iStatusBar, 'Done')
		Case $iBtnDelete
			GUICtrlSetData($iStatusBar, 'Done')
		Case -3
			Exit
	EndSwitch
WEnd
Кстати, не хватает "Названия записи". URL сайта не всегда подходящее.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
AZJIO, Да всё гораздо проще пусть автор озвучит алгоритм шифрования, и я озвучу право на жизнь данной программы. Если алгоритм RSA - то программа не имеет права на жизнь, так же как и программа в аналогичной теме которая сейчас активно обсуждается.
 
Автор
xklx

xklx

Новичок
Сообщения
50
Репутация
3
Belfigor [?]
AZJIO, Да всё гораздо проще пусть автор озвучит алгоритм шифрования, и я озвучу право на жизнь данной программы. Если алгоритм RSA - то программа не имеет права на жизнь, так же как и программа в аналогичной теме которая сейчас активно обсуждается.

Ну тогда решите судьбу программы :(

Код:
$input = InputBox("Введите пароль","Введите пароль для доступа к списку паролей","","*")
$shifr = "4tonibyd" & $input & Bitor(hex(StringToBinary ($input,4)),0x45758315)
_StringEncrypt (True,$unEnc,$shifr, 5)
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
xklx [?]
Ну тогда решите судьбу программы
Что вы имеете ввиду? То что пароль доступен? Я думаю нужно вводить пароль при входе в аккаунт. Хранить пароль в программе бесполезно, её легко декомпилировать.
 
Автор
xklx

xklx

Новичок
Сообщения
50
Репутация
3
AZJIO [?]
Что вы имеете ввиду? То что пароль доступен? Я думаю нужно вводить пароль при входе в аккаунт. Хранить пароль в программе бесполезно, её легко декомпилировать.

Так дело в том что не весь шифр находится в программе, а шифр содержит пароль, некое слово и число образованное от пароля
чем не шифр и при этом не весь он в программе
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
.xklx [?]
Ну я незнаю правильно ли это называть "косяком"
я указал на то, что если есть уже один созданный файл базы, то программа дает себя запустить с другим паролем и редактирует эту базу. точнее перезаписывает. а зачем есть такой доступ? если при запуске ввели другой пароль, то и новый файл базы данных должен быть.
ну и опять та же ошибка
 
Автор
xklx

xklx

Новичок
Сообщения
50
Репутация
3
joiner [?]
я указал на то, что если есть уже один созданный файл базы, то программа дает себя запустить с другим паролем и редактирует эту базу. точнее перезаписывает. а зачем есть такой доступ? если при запуске ввели другой пароль, то и новый файл базы данных должен быть.ну и опять та же ошибка

Т.е предлагаешь сделать типо многопрофильность опираясь на пароль? Хм но интересно по какому алгоритму сделать имя файла и получается ещё надо сделать аля индентификатора пароля чтобы он распознавал что это именно тот файл данных
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
xklx
если не делать многопрофильность, то не давать запускаться программе с другим паролем. то есть мы создали базу данных с паролем 123. а значит при повторном запуске программы она считывает пароль из базы данных и откликается только на 123. то есть продолжить работу с программой можно только после введения этого пароля. если же нет базы данных, то программа опять принимает любой пароль. так мы можем накапливать базы данных для разных пользователей. хотя это уже вариации. но факт в одном - запуск программы с другим паролем недопустим
 

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Насколько я понимаю, сама база - это INI файл.

Если я правильно понял, то вот самый легкий вариант с проверкой пароля:
Уделяешь в базе отдельную секцию и ключ, например:
Код:
[Prog]
PassCheck=52

А после того, как пользователь вводит пароль начинаешь дешифрование файла.
Затем, читаешь эту секцию:
Код:
#Include <IniVirtual.au3>
Local $A = _IniVirtual_Initial ( $Data ); $Data = прочитанный файл базы (в не зашифрованном виде)
IF _IniVirtual_Read ( $A, "Prog", "PassCheck", "0" ) <> 54 Then
MsgBox(16,"","Неверный пароль!")
Exit
Else
MsgBox(64,"","Добро пожаловать!")
EndIF


Если пароль был неверным, то _IniVirtual_Read ( $A, "Prog", "PassCheck", "0" ) вернет 0
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
xklx [?]
В новой версии AutoIt эта функция удалена из справки, но пока остаётся в UDF наверно для совместимости. Для этого есть другие:
Код:
#include <Crypt.au3>
; Способ создания пароля
; $password='Новый пароль'
; $bEncrypted = _Crypt_EncryptData($password, $password, $CALG_AES_192)
; MsgBox(0, 'Шифрованый пароль', $bEncrypted)
; ClipPut($bEncrypted)

; для программы
$bEncrypted = '0x8B28423C208DE678B2772422950C6A71' ; пароль Привет
Do
	$pass = InputBox('Вход', 'Введите пароль', '', '*', 100, 130)
	If @error Then Exit
Until $pass == BinaryToString(_Crypt_DecryptData($bEncrypted, $pass, $CALG_AES_192))
MsgBox(0, 'Вход', 'Пароль верный - ' & $pass)
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
xklx сказал(а):
Belfigor [?]
AZJIO, Да всё гораздо проще пусть автор озвучит алгоритм шифрования, и я озвучу право на жизнь данной программы. Если алгоритм RSA - то программа не имеет права на жизнь, так же как и программа в аналогичной теме которая сейчас активно обсуждается.

Ну тогда решите судьбу программы :(

Код:
$input = InputBox("Введите пароль","Введите пароль для доступа к списку паролей","","*")
$shifr = "4tonibyd" & $input & Bitor(hex(StringToBinary ($input,4)),0x45758315)
_StringEncrypt (True,$unEnc,$shifr, 5)
Алгоритм RC4 является одним из потомков RSA, криптоустойчивость RSA напрямую зависит от битности ключа. У autoit при стандартной реализации - большие проблемы с длинными числами. Для обеспечения хотя бы относительной криптоустойчивости программы, минимальная длинна ключа должна составлять 128 бит. Но на данный момент, по рекомендациям различных криптографических лабораторий, длинна ключа рекомендуемая для различных алгоритмов в принципе, составляет 2048 бит. Но ввиду простоты реализации, большинство представляемых на рынке программ, даже не поддерживают алгоритмы шифрования способные переработать ключ такой длинны, и единственное что они могут обеспечить пользователю - это лишь душевное спокойствие пользователя и защиту данных от домашних питомцев, но никак не безопасность его данных.


Добавлено:
Сообщение автоматически объединено:

Цитата из педивикии:
В отличие от современных шифров (таких, как в eSTREAM), RC4 не использует отдельной оказии (англ. nonce) наряду с ключом. Это значит, что если один ключ должен использоваться в течение долгого времени для шифрования нескольких потоков, сама криптосистема, использующая RC4, должна комбинировать оказию и долгосрочный ключ для получения потокового ключа для RC4. Один из возможных выходов — генерировать новый ключ для RC4 с помощью хэш-функции от долгосрочного ключа и оказии. Однако многие приложения, использующие RC4, просто конкатенируют ключ и оказию. Из-за этого и слабого расписания ключей, используемого в RC4, приложение может стать уязвимым.[6][7][8] Поэтому он был признан устаревшим многими софтверными компаниями, такими как Microsoft. Например, в .NET Framework от Microsoft отсутствует реализация RC4.
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Belfigor сказал(а):
душевное спокойствие пользователя и защиту данных от домашних питомцев
OffTopic:
А если моя кошка секретный агент ЦРУ и следит за мною, Belfigor какой алгоритм посоветуете?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Коллеги давайте не будем тему превращать в курилку! О том, какой алгоритм кому нравится можно обсудить, создав отдельную тему в разделе "Общение". Здесь пишите, пожалуйста, по существу.
 

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Garrett [?]
Коллеги давайте не будем тему превращать в курилку! О том, какой алгоритм кому нравится можно обсудить, создав отдельную тему в разделе "Общение". Здесь пишите, пожалуйста, по существу.

Хорошо, но мне кажется, что этот вопрос будет по существу: как Вы считаете, какой функцией (поддерживаемой AutoIt) надежнее всего шифровать данные?
После прочтенного выше я уже сам сомневаюсь в RC4 - я пишу свой полноценный Password Manager и хотелось-бы обеспечить надежную защиту для паролей пользователя... Этот вопрос не только к Garrett, этот вопрос к каждому, кому важна защита личной информации :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Придерживаюсь мнения что защита личной информации на локальном компьютере не требуется вовсе. Хотите защитить инфу от жены\любовницы\детей\домашних животных, просто напишите функцию замены символов. Защита же локальной информации с помощью статичных ключей приведет лишь к увеличению времени взлома методом брутфорса. Хотите защитить информацию статичными ключами надежно, такие сервисы например как http://www.keylength.com вам в помощь. И вообще, при попытке защитить информацию каким-либо алгоритмом, первое что рекомендую делать это гуглить на тему "взлом <имя алгоритма>"
 
Верх