Что нового

Расшифровать файл в переменную

Suppir

Продвинутый
Сообщения
967
Репутация
62
Добрый день!

Зашифровал файл с помощью:

Код:
#Include <Crypt.au3>
_Crypt_Startup()
_Crypt_EncryptFile($sSourceFile, $sDestinationFile, $vCryptKey, $iALG_ID)
_Crypt_Shutdown()


Теперь нужно расшифровать этот файл не в файл, а сразу в переменную (без создания временных файлов). Как это сделать?


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

Все, разобрался. Чтобы прочитать зашифрованный файл в переменную, нужно написать:

Код:
$IN = FileRead("file.hash")
$str = _Crypt_DecryptData($IN, "parol", $CALG_RC4)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,669
Репутация
2,463
Код:
$sData = _Crypt_DecryptData(FileRead($sDestinationFile), $vCryptKey, $iALG_ID)


?
:scratch:
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Заметил одну важную особенность.

Библиотека содержит несколько алгоритмов криптования:

$CALG_3DES
$CALG_DES
$CALG_RC2
$CALG_RC4

Я перепробовал все алгоритмы, но только последний работал нормально. В остальных случаях исходный и результирующий файлы отличались на несколько байт. Сравнение показало, что другие алгоритмы кое-где склеивали две строки вместе. На файле 10 Мб было 4 таких места. В общем, советую использовать $CALG_RC4 - при криптовании туда и обратно он выдал аналогичный файл.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
Suppir сказал(а):
Я перепробовал все алгоритмы, но только последний работал нормально. В остальных случаях исходный и результирующий файлы отличались на несколько байт. Сравнение показало, что другие алгоритмы кое-где склеивали две строки вместе. На файле 10 Мб было 4 таких места. В общем, советую использовать $CALG_RC4 - при криптовании туда и обратно он выдал аналогичный файл.

Интересное замечание. Но с другой стороны, если есть хотя бы одно несовпадение, то это уже серьезная ошибка. Я не думаю, что это нормальное поведение функции. Возможно проблемы в самой ее реализации на AutoIt. Нужно проверить. А каким способом ты сравнивал файлы?
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Yashied, очень просто:

Код:
#Include <Crypt.au3>
_Crypt_EncryptFile("myFile.txt", "myFile.hash", "password", $CALG_RC4)
sleep(100)
_Crypt_DecryptFile("myFile.hash", "result.res", "password", $CALG_RC4)


В итоге получилось, что при использовании $CALG_3DES, $CALG_DES, $CALG_RC2 в качестве алгоритма шифрования, конечный файл отличался от исходника на несколько байт. Сравнил с помощью Total Commander'а - в нескольких места две строки склеены вместе. Исходники были в кодировке ANSI.

Алгоритм $CALG_RC4 отработал нормально (пробовал на нескольких исходниках), поэтому остановился на нем.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
Я перепробывал все алгоритмы, и все OK (в качестве исходника взял WinAPIEx.au3). Человеческий фактор? Скинь мне пож. свой myFile.txt файл, я попробую.
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Yashied
хорошо, завтра скину.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
Поигрался с твоим файлом. Проблема не в алгоритме, а в Crypt.au3. Нужно в двух местах заменить это (я вообще не пойму зачем monoceres так сделал):

Код:
FileRead($hInFile, 1024 * 1024)


на это:

Код:
FileRead($hInFile)


Или использовать _Crypt_EncryptData() и _Crypt_DecryptData(). И все будет OK.

PS

Вот так обычно и рождаются слухи, что вот это мол плохое и глючное, а вот это - хорошее и пушистое.

:smile:
 
Верх