Что нового

шифровка jpg

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
Я совместил код, написанный Madmasles-ом с выбором папки, но походу что-то вновь накосячил.

Если смотреть на строки там, где отображаются ошибки, то по ним можно судить, что скрипт работает, но не видит файлы

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


$hGui = GUICreate('Шифровка фото')
$iButton = GUICtrlCreateButton('-', 10, 10, 21, 21, $BS_ICON)

GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 4, 0)
GUISetState()
While 1
    Switch GUIGetMsg()
        Case $iButton
          
            $sPath = FileSelectFolder('Выберите папку', '', 3, @DesktopDir, $hGui)
          
            If @error Or Not StringInStr(FileGetAttrib($sPath), "D") Then ContinueLoop


Opt('MustDeclareVars', 1)

Global $sFile = $sPath & '\*.jpg', $sFileMixed = @ScriptDir & '\*.mxd' ;Якобы все файлы с таким расширением

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


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


            GUIDelete($hGui)
            ExitLoop
    EndSwitch
WEnd

посмотрите пожалуйста в чем ошибка
 

Olim98

Новичок
Сообщения
48
Репутация
2
Вот, практически полностью переделал твой код, за исключением шифратора:
Код:
#include <GUIConstantsEx.au3>

$hGui = GUICreate('Шифровка фото')
$iCrypt = GUICtrlCreateButton('Зашифровать фото', 10, 10, 201, 26)
$iDecrypt = GUICtrlCreateButton('Расшифровать фото', 10, 50, 201, 26)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $iCrypt
			$sPath = 0
			$hFileFind = 0
			$sFile = 0
			$sPath = FileSelectFolder('Выберите папку', '', 3, @DesktopDir, $hGui)
			If @error Then
				MsgBox(4096, "Ошибка", "Вы отменили выбор папки!")
				ContinueLoop
			EndIf
			$hFileFind = FileFindFirstFile($sPath & '\*.jpg')
			While 1
				$sFile = FileFindNextFile($hFileFind)
				If @error Then ExitLoop
				If @extended = 1 Then ContinueLoop
				$fMixReturn = _File_Mix($sPath & "\" & $sFile)
				If Not $fMixReturn Then
					MsgBox(4096, "Ошибка", "Ошибка шифрования фалйа:" & @CRLF & $sPath & "\" & $sFile)
					ContinueLoop
				EndIf
			WEnd
			FileClose($hFileFind)
			MsgBox(4096, "Готово", "Фотографии зашифрованы!")

		Case $iDecrypt
			$sPath = 0
			$hFileFind = 0
			$sFile = 0
			$sPath = FileSelectFolder('Выберите папку', '', 3, @DesktopDir, $hGui)
			If @error Then
				MsgBox(4096, "Ошибка", "Вы отменили выбор папки!")
				ContinueLoop
			EndIf
			$hFileFind = FileFindFirstFile($sPath & '\*.mxd')
			While 1
				$sFile = FileFindNextFile($hFileFind)
				If @error Then ExitLoop
				If @extended = 1 Then ContinueLoop
				$fMixReturn = _File_Mix($sPath & "\" & $sFile)
				If Not $fMixReturn Then
					MsgBox(4096, "Ошибка", "Ошибка расшифрования фалйа:" & @CRLF & $sPath & "\" & $sFile)
					ContinueLoop
				EndIf
			WEnd
			FileClose($hFileFind)
			MsgBox(4096, "Готово", "Фотографии расшифрованы!")

		Case $GUI_EVENT_CLOSE
			ExitLoop
	EndSwitch
WEnd

GUIDelete($hGui)

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

Правда практически никаких перехватов ошибок нет, кроме самых важных
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Я тут уже неделю за вами наблюдаю и не могу понять, зачем придумывать такой геморой. Ну добавьте в начало .jpg файла 1 КБ мусора, и никакая программа не прочитает его. А работать все это будет намного быстрее.
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
Yashied сказал(а):
Я тут уже неделю за вами наблюдаю и не могу понять, зачем придумывать такой геморой. Ну добавьте в начало .jpg файла 1 КБ мусора, и никакая программа не прочитает его. А работать все это будет намного быстрее.


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

joiner

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

Yashied [?]
Ну добавьте в начало .jpg файла 1 КБ мусора, и никакая программа не прочитает его
если добавлять что то к размеру файла, то можно просто начало файла (тот же 1кб) считать и записать в конец, а в начале забить нулями. это чтобы не переписывать весь файл. так как что то добавить в начало без перезаписи всего файла нельзя(в смысле целостности записи)
 
Верх