Что нового

Привязка программы по логину и паролю через ini файл на сайте.

vanekzver

Новичок
Сообщения
91
Репутация
2
Хочу предложить еще 1 способ a.k.a. привязки программы.

Авторизация через ini файл на сайте, с шифровкой данных, а также запоминания логина и пароля в реестре, и тоже с шифровкой.

Приступим. Для начала создадим файл Login.ini, и в его же директории билдер логина и пароля в зашифрованном виде.

Код:
#Region
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#EndRegion
#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <String.au3>
$sPath_ini=@ScriptDir & "\Login.ini"
$gui = GUICreate ("Генератор by VanekZver", 230,100)
GUICtrlCreateLabel ("Ваш логин:", 10,10)
$Login = GUICtrlCreateInput ('', 80,7, 100)
GUICtrlCreateLabel ("Ваш Пароль:", 10,40)
$Password = GUICtrlCreateInput ('', 80,35, 100)
$user = "Login_Password"
GUISetState(@SW_SHOW)
$b = GUICtrlCreateButton('Войти', 10, 60, 42,20)
While 1
	$username = GUICtrlRead($Login, 0)
	$userpass = GUICtrlRead($Password, 0)
	$msg = GUIGetMsg(1)
	Select
		Case $msg[0] = $b
		GUISetState(@SW_SHOW, $msg[1])
		If $msg[0] = $b Then
	$user_pass_encoded = _StringEncrypt ( 1, $userpass,'DDos Client passw0rd 2019271523412321 OoO',1)
	IniWrite($sPath_ini, $user, $username, $user_pass_encoded)
	Exit
	EndIf
	Case $msg[0] = $GUI_EVENT_CLOSE
	If $msg[1] = $gui Then
		Exit
	EndIf
	EndSelect
WEnd
GUIDelete()

Компилим и запускаем. В программе вводим свой логин и пароль для доступа к программе, жмем Войти, программу писал на ходу если надо поправите сами). После кнопки Войти, программа выйдет, а в Login.ini, появится ваш login и пароль (пароль в зашифрованном виде).

В ini файле вы так же можете хранить множество логинов и паролей, для этого просто генерируйте их через билдер, и вставляйте в готовый ini файл, который вы сбилдили в 1 раз, в самый конец документа, без данной строчки [Login_password].

Когда все готово, заливаем файл к себе на сайт.

Теперь перейдем непосредственно к программе:
В самое начало добавляем этот код:
Код:
#Region
#AutoIt3Wrapper_Compression=0
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=Programm Created By #VanekZver) ©
#AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
#EndRegion
#NoTrayIcon
#include <GUIConstants.au3>
#include <EditConstants.au3>
#include <IniString.au3>

#Region Объявление переменных
$username_checked = 0
$password_checked = 0
$username_startup = ''
$password_startup = ''
#EndRegion Объявление переменных

#Region Блок запоминания - инициализация
$reg_remember_username_confirm = RegRead("HKEY_CURRENT_USER\SOFTWARE\Autorisation", 'RememberUsername')
If $reg_remember_username_confirm = 1 Then
	$username_checked = 1
	$username_startup = RegRead("HKEY_CURRENT_USER\SOFTWARE\Autorisation", 'Username')
EndIf
$reg_remember_password_confirm = RegRead("HKEY_CURRENT_USER\SOFTWARE\Autorisation", 'RememberPassword')
If $reg_remember_password_confirm = 1 Then
	$password_checked = 1
	$password_startup = RegRead("HKEY_CURRENT_USER\SOFTWARE\Autorisation", 'Password')
	$password_startup = _StringEncrypt ( 0, $password_startup,'SupePQ123 Client passw0rd 20192715234123212012qwerty OoO',1)
EndIf
#EndRegion Блок запоминания - инициализация

#Region ### START Koda GUI section ### Login
$hGUI = GUICreate('Авторизация', 195, 130)
GUICtrlCreateLabel("Логин", 10, 20)
$hLogin = GUICtrlCreateInput($username_startup, 50, 16, 120)
GUICtrlCreateLabel("Пароль", 10, 50)
$hPassword = GUICtrlCreateInput($password_startup, 50, 44, 120, 21, $ES_PASSWORD)
$remember_name = GUICtrlCreateCheckbox("Запомнить логин", 16, 70)
$remember_pass = GUICtrlCreateCheckbox("Запомнить пароль", 16,90)
$hButton = GUICtrlCreateButton('Войти', 130, 73, 42,40)
If $username_checked = 1 Then GUICtrlSetState($remember_name, $GUI_CHECKED)
If $password_checked = 1 Then GUICtrlSetState($remember_pass, $GUI_CHECKED)
#EndRegion ### END Koda GUI section ### Login

GUISetState()
While 1
			$hLogin1 = GUICtrlRead($hLogin) ; читаем имя и пароль с инпутов
			$hPassword1 = GUICtrlRead($hPassword)
			If GUICtrlRead($remember_name) = 1 Then ; если галка запомнить имя
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\Autorisation", 'RememberUsername', 'REG_SZ', '1')
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\Autorisation", 'Username', 'REG_SZ', $hLogin1)
			Else
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\Autorisation", 'RememberUsername', 'REG_SZ', '0')
			EndIf
			If GUICtrlRead($remember_pass) = 1 Then ; если галка запомнить пароль
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\Autorisation", 'RememberPassword', 'REG_SZ', '1')
				$user_pass_encoded = _StringEncrypt ( 1, $hPassword1,'SupePQ123 Client passw0rd 20192715234123212012qwerty OoO',1)
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\Autorisation", 'Password', 'REG_SZ', $user_pass_encoded)
			Else
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\Autorisation", 'RememberPassword', 'REG_SZ', '0')
			EndIf
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
        Case $msg = $hButton
            $sLog = GUICtrlRead($hLogin)
            $sPass = GUICtrlRead($hPassword)
            $iControl = _Validate_Password($sLog, $sPass)
            If Not @error Then
                If $iControl Then

                    ExitLoop
                Else
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\Autorisation", 'RememberUsername', 'REG_SZ', '0')
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\Autorisation", 'RememberPassword', 'REG_SZ', '0')
                    Exit
                EndIf
            Else

                Exit
            EndIf
    EndSelect
WEnd

GUIDelete($hGUI)

А в самый конец вашего кода это:
Код:
Func _Validate_Password($s_Login, $s_Password)
    Local $s_TextFromSite, $s_Url = 'http://yourdomen.ru/logpas.ini', _
	$s_Control_Pass, $s_Section = 'Login_Password'
    $s_TextFromSite = InetRead($s_Url, 17)
    If @error Then Return SetError(1)
    $s_TextFromSite = BinaryToString($s_TextFromSite)
    $s_Control_Pass = _IniString_Read($s_TextFromSite, $s_Section, $s_Login, 'Error')
    Return SetError(0, 0, $s_Control_Pass = $s_Password)
EndFunc

Все, меняем yourdomen.ru на ваш, и проверяем.
 

teges

Знающий
Сообщения
18
Репутация
16
на реальном хостинге пришлось исправить строчку в библиотеке IniString.au3

Код:
Local $aIni = StringSplit($sIni, @CRLF, 1), $sSectData

на
Код:
Local $aIni = StringSplit($sIni, @LF, 1), $sSectData

так и не понял в чем подвох, кодировка? :scratch:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
teges [?]
так и не понял в чем подвох, кодировка?

Ответ от Kaster (восстановлено с RSS):
нет, не кодировка, а окончание строки. где-то это @CR (mac), где-то @LF (linux), а где-то все вместе @CRLF (win)

Мой ответ:
Правильнее будет так:

Код:
Local $aIni = StringSplit(StringStripCR($sIni), @LF, 1), $sSectData
 
Верх