Что нового

скрытая расшифровка файлов MXD

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
Теперь такой вопрос. как сделать так, что бы программа расшифровывала файл m:rofl: без его сохранения и отображала его только в открытом GUI

Вот пример кода с просмотром фотографий(Спасибо тому, кто составил основную часть) я добавил функцию выбора папки отображения

Код:
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>

; Пример 1
$hGui = GUICreate('Функция FileSelectFolder')
$iButton = GUICtrlCreateButton('-', 10, 10, 21, 21, $BS_ICON)

GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 4, 0)
GUISetState()
While 1
    Switch GUIGetMsg()
        Case $iButton
            ; пример с использованием GUI аналогичен для FileOpenDialog и FileSaveDialog
            $sPath = FileSelectFolder('Выберите папку', '', 3, @DesktopDir, $hGui)
            ; продолжить цикл опроса от начала, если выбор отменён или объект не является папкой, например "Мой компьютер" или Корзина
            If @error Or Not StringInStr(FileGetAttrib($sPath), "D") Then ContinueLoop
       #include <GuiConstantsEx.au3>
#include <File.au3>

$Folder = $sPath
$Files = _FileListToArray($Folder, "*.jpg", 1, True)
If @error Then Exit

Global $Width = 960, $Height = 600, $i = 1, $Pic

$GUI = GUICreate("Example", $Width, $Height)
$Pic = GUICtrlCreatePic($Files[1], 0, 0, $Width, $Height)
GUISetState()

Do
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      ExitLoop
    Case $GUI_EVENT_PRIMARYDOWN
      $i += 1
      If $i > $Files[0] Then $i = 1
      GUICtrlDelete($Pic)
      $Pic = GUICtrlCreatePic($Files[$i], 0, 0, $Width, $Height)
    Case $GUI_EVENT_SECONDARYDOWN
      $i -= 1
      If $i < 1 Then $i = $Files[0]
      GUICtrlDelete($Pic)
      $Pic = GUICtrlCreatePic($Files[$i], 0, 0, $Width, $Height)
  EndSwitch
Until 0

		 Case $GUI_EVENT_CLOSE
            GUIDelete($hGui)
            ExitLoop
    EndSwitch
WEnd

вот чистый код шифровки

Код:
Opt('MustDeclareVars', 1)

Global $sFile = @ScriptDir & '\*.jpg', $sFileMixed = @ScriptDir & '\*.mxd'

ConsoleWrite(_File_Mix($sFile) & @LF)
ConsoleWrite(_File_Mix($sFileMixed) & @LF)


#cs
    Если файл с "нормальным" именем, запишет перемешанное содержимое в файл с именем ИмяФайла_расширение.mxd в эту же папку
    Если файл с именем ИмяФайла_расширение.mxd, запишет исходное содержимое в файл с именем ИмяФайла.расширение в эту же папку

    Если все ОК, вернет True.
    При ошибке вернет False.

    !!!Функция не предназначена для перемешивания больших файлов!!!
#ce
Func _File_Mix($s_File)
    Local Const $s_HexStr = '8C1006DBD60E18CC92AD18834F047F3C8D8F678ACE598CF0A95E747A5286D9778F85E427710363AC'
    Local $i_Err = 1, $i_Size, $i_Mod, $i_Part, $a_Seq, $i_Mixed, $s_FileMixed, $h_File, $h_FileMixed, $h_FilePos, $b_Read

    $i_Size = FileGetSize($s_File)
    If Not $i_Size Then Return False
    $i_Mod = Mod($i_Size, 10)
    $i_Part = Int($i_Size / 10)
    $a_Seq = StringSplit(Dec(StringMid($s_HexStr, $i_Mod * 8 + 1, 8), 2), '')
    If $a_Seq[0] <> 10 Then Return False
    If StringRight($s_File, 4) = '.mxd' Then
        $i_Mixed = 1
        $s_FileMixed = StringReplace(StringTrimRight($s_File, 4), '_', '.', -1)
    Else
        $s_FileMixed = StringReplace($s_File, '.', '_', -1) & '.mxd'
    EndIf
    Do
        $h_File = FileOpen($s_File, 16)
        If $h_File = -1 Then ExitLoop
        $h_FileMixed = FileOpen($s_FileMixed, 18)
        If $h_FileMixed = -1 Then ExitLoop
        If $i_Mixed Then
            $h_FilePos = $h_FileMixed
        Else
            $h_FilePos = $h_File
        EndIf
        For $i = 1 To 10
            If Not FileSetPos($h_FilePos, $a_Seq[$i] * $i_Part, 0) Then ExitLoop 2;$FILE_BEGIN
            $b_Read = FileRead($h_File, $i_Part)
            If @error Then ExitLoop 2
            If Not FileWrite($h_FileMixed, $b_Read) Then ExitLoop 2
        Next
        If $i_Mod Then
            If Not FileSetPos($h_FilePos, $a_Seq[0] * $i_Part, 0) Then ExitLoop
            $b_Read = FileRead($h_File, $i_Mod)
            If @error Then ExitLoop
            If Not FileWrite($h_FileMixed, $b_Read) Then ExitLoop
        EndIf
        FileClose($h_File)
        FileClose($h_FileMixed)
        $i_Err = 0
    Until 1
    If $i_Err Then
        FileClose($h_File)
        FileClose($h_FileMixed)
        FileDelete($s_FileMixed)
    EndIf
    Return $i_Err = 0
EndFunc   ;==>_File_Mix
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
Ну подскажите хотя бы в каком направлении копать...
Я сижу над кодом шифровки и не понимаю как его расшифровывать не сохраняя а отображать сразу в программе
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
VermanVendetta13 [?]
не понимаю как его расшифровывать не сохраняя а отображать сразу в программе
Для этого надо практически полностью переписывать функцию _File_Mix(), чтобы функция при расшифровке возвращала бинарную строку или структуру (по идее лучше переписать ее на API- функциях, а мне, когда я ее писал, было интересно ее написать именно на нативных функциях). Дальнейшие действия - пример есть здесь.
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
madmasles сказал(а):
VermanVendetta13 [?]
не понимаю как его расшифровывать не сохраняя а отображать сразу в программе
Для этого надо практически полностью переписывать функцию _File_Mix(), чтобы функция при расшифровки возвращала бинарную строку или структуру. Дальнейшие действия - пример есть здесь.


Посмотрел. Примерно понял что нужно делать. А где можно посмотреть значения всех операторов $. В справке что то не нашел
 

Olim98

Новичок
Сообщения
48
Репутация
2
VermanVendetta13
Я вам вроде переделал код ваш код, а вы снова используете свой, который я уверен абсолютно не работаспособен
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
Olim98 сказал(а):
VermanVendetta13
Я вам вроде переделал код ваш код, а вы снова используете свой, который я уверен абсолютно не работаспособен

Тут уже дело в другом. Шифратор расшифратор это дело одно. Полезная штука. Спасибо за помощь.
Фишка уже в том чтобы расшифровка происходила внутри программы и отображалась в GUI а не сохранялась
 
Верх