; ====================================================
; Утилита для шифрования данных с графическим интерфейсом
; ====================================================
; AutoIt version: 3.0.103
; Language:       English
; Author:         "Wolvereness"
; Modified:       jpm
;
; ----------------------------------------------------------------------------
; Начало скрипта
; ----------------------------------------------------------------------------

#include <ComboConstants.au3>
#include <Crypt.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <String.au3>
; #include - включает файлы для шифрования/дешифрования и константы GUI

_Main()

Func _Main()
	; Создаёт окно
	GUICreate('Утилита для шифрования данных', 400, 400)

	; Создаёт основное окно редактирования
	Local $idEditText = GUICtrlCreateEdit('', 5, 5, 380, 350)

	; Создаёт поле ввода пароля скрытый под звёздочками и по центру
	Local $idInputPass = GUICtrlCreateInput('', 5, 360, 100, 20, BitOR($ES_CENTER, $ES_PASSWORD))

	; Создаёт выпадающий список для выбора алгоритма шифрования
	Local $idCombo = GUICtrlCreateCombo("", 110, 360, 90, 20, $CBS_DROPDOWNLIST)
	GUICtrlSetData($idCombo, "3DES|AES (128bit)|AES (192bit)|AES (256bit)|DES|RC2|RC4", "RC4")

	; Кнопки шифрования и дешифрования
	Local $idEncryptButton = GUICtrlCreateButton('Шифровать', 210, 360, 85, 35)
	Local $idDecryptButton = GUICtrlCreateButton('Дешифровать', 300, 360, 85, 35)

	; Простые текстовые надписи, чтобы вы знали, что есть что
	GUICtrlCreateLabel('Пароль', 5, 385)
	GUICtrlCreateLabel('Алгоритм шифра', 110, 385)

	; Показывает окно
	GUISetState()

	Local $iAlgorithm = $CALG_RC4
	Local $dEncrypted

	While 1
		Switch GUIGetMsg()
			Case $GUI_EVENT_CLOSE
				ExitLoop

			Case $idCombo ; Проверяет сделанный выбор в выпадающем списке и назначает соответствующую константу.
				Switch GUICtrlRead($idCombo) ; Читает выбранное в Combo.
					Case "3DES"
						$iAlgorithm = $CALG_3DES

					Case "AES (128bit)"
						$iAlgorithm = $CALG_AES_128

					Case "AES (192bit)"
						$iAlgorithm = $CALG_AES_192

					Case "AES (256bit)"
						$iAlgorithm = $CALG_AES_256

					Case "DES"
						$iAlgorithm = $CALG_DES

					Case "RC2"
						$iAlgorithm = $CALG_RC2

					Case "RC4"
						$iAlgorithm = $CALG_RC4

				EndSwitch

			Case $idEncryptButton
				; Когда вы нажимаете "Шифровать"

				; Вызывает шифрование. Вставляет зашифрованные данные в окно редактирования
				$dEncrypted = _Crypt_EncryptData(GUICtrlRead($idEditText), GUICtrlRead($idInputPass), $iAlgorithm) ; Шифрует текст с новым шифровальным ключом.
				GUICtrlSetData($idEditText, $dEncrypted)

			Case $idDecryptButton
				; Когда вы нажимаете "Дешифровать"

				; Вызывает дешифрование. Вставляет дешифрованные данные в окно редактирования
				$dEncrypted = _Crypt_DecryptData(GUICtrlRead($idEditText), GUICtrlRead($idInputPass), $iAlgorithm) ; Дешифрует данные используя пароль. Возвращаемое значение является бинарной строкой.
				GUICtrlSetData($idEditText, BinaryToString($dEncrypted))

		EndSwitch
	WEnd
EndFunc   ;==>_Main
