Что нового

[Криптография] добавление информации в зашифрованный ini файл

Rjevsky

Новичок
Сообщения
102
Репутация
4
Есть зашифрованный ini файл с помощью _Crypt_EncryptFile (RC4), пароль, к примеру "god". Требуется добавить в этот файл в зашифрованном виде, но с другим паролем ("qwerty") информацию, содержащую пароль нашего ini файла.

Ну и соответственно как то получить возможность извлекать из полученного файла и пароль в виде строкового параметра и исходный ini файлик.
 

XM

Знающий
Сообщения
70
Репутация
8
Не совсем ясна задача...
Требуется добавить в этот файл в зашифрованном виде, но с другим паролем ("qwerty")
Т.е. при добавлении файла изменить пароль доступа??


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

Или знаки препинания неправильно расставлены...??
 
Автор
R

Rjevsky

Новичок
Сообщения
102
Репутация
4
- есть файлик (ini) зашифрованный с помощью _Crypt_EncryptFile (RC4), пароль "god"
- этот пароль "god" требуется хранить в этом же зашифрованном файле, но с возможностью увидеть его, введя пароль "qwerty". - введя пароль "god" требуется дешифровать исходный ini файлик.
 

XM

Знающий
Сообщения
70
Репутация
8
Rjevsky сказал(а):
... - этот пароль "god" требуется хранить в этом же зашифрованном файле, но с возможностью увидеть его, введя пароль "qwerty". - введя пароль "god" требуется дешифровать исходный ini файлик.
Если честно, то я, как специалист по криптоаналитике, не совсем понимаю задачу... Вернее считаю, что она обсурдна...
Если какие-то данные зашифрованы с помощью одного ключа, то открыть эти данные возможно лишь только имея этот самый ключ (так сказать для рядовых пользователей). Сам ключ в зашиврованном файле НЕ ХРАНИТЬСЯ! Этот ключ (код) является дополнительным ключом к алгоритму шифрования, с помошью которого зашифрован сам файл.
 
Автор
R

Rjevsky

Новичок
Сообщения
102
Репутация
4
Для того, что бы не было вопросов по поводу абсурдности. Смыс сей затеи такой:
Планирую написать программу для тестирования. Ответы и вопросы будут храниться в ini файле. Пароль для защиты будет устанавливать преподаватель. Для того, что бы тестируемые люди не могли прочитать ответы из ini файла, он зашифрован. Но сама программа должна читать этот файл не зная пароля. Поэтому я вижу решение в том, что бы хранить информацию о пароле в отдельном зашифрованном файле, с мастер-паролем известным только программе. Это легко реализуемо, но не хотелось бы плодить файлы. Хочется получить на выходе 1 файл содержащий всю необходимую информацию для работы программы.
 

SyDr

Сидра
Сообщения
651
Репутация
158
Ыыы... :smile:
Я как раз такое другу писал на дипломник.
Немного косо, но работает.

Для прохождения теста также требуется вводить пароль? Который как раз и хранится в ini?

Шифруй все файлы с одинаковым паролем (а его забей в саму программу). Ты ведь не для программистов пишешь тестирующую программу?
 
Автор
R

Rjevsky

Новичок
Сообщения
102
Репутация
4
SyDr сказал(а):
Для прохождения теста также требуется вводить пароль? Который как раз и хранится в ini?
Нет. Весь смысл в том, что программа должна работать без всяких паролей.

SyDr сказал(а):
Шифруй все файлы с одинаковым паролем (а его забей в саму программу). Ты ведь не для программистов пишешь тестирующую программу?
способ не подходит по многим причинам.
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
Что-то типа этого:
Код:
#Include <String.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$sSettings_ini = @ScriptDir & "\settings.ini" ; путь к ini файлу
$sPass2 = "qwerty" ; пароль номер два, которым будет зашифрован основной пароль
If FileExists ($sSettings_ini) = 0 Then ; если ini файла не существует, то 
	MsgBox (0, "Ошибка", "Не найден файл settings.ini, полижите его рядом.")
	Exit
EndIf
$Form1 = GUICreate("Пример шифрования", 600, 114)
$Button1 = GUICtrlCreateButton("Расшифровать", 8, 8, 85, 25)
$Label1 = GUICtrlCreateLabel("", 8, 40, 584, 65)
$seString = IniRead ($sSettings_ini, "crypt", "string", ""); читаем шифрованую строку из ini файла
$sepass1 = IniRead ($sSettings_ini, "crypt", "pass1", ""); читаем шифрованую строку из ini файла
GUICtrlSetData ($Label1, "Зашифрованные данные в ini файле: "&@CRLF&"string= "&$seString&@CRLF _ 
&"pass1= "&$sepass1)

GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
        Case $Button1
			$suSecretPass = _StringEncrypt(0, $sepass1, $sPass2, 1); расшифровываем первый пароль
			$suString = _StringEncrypt(0, $seString, $suSecretPass, 1); расшифровываем секретную строку первым паролем
			GUICtrlSetData ($Label1, "Расшифрованные данные в ini файле: "&@CRLF _ 
			&"string= "&$suString&@CRLF&"pass1= "&$suSecretPass)
	EndSwitch
WEnd


settings.ini (положить рядом)
Код:
[crypt]
string=DB11ECFD2749202E8E2F78A26E6DBE1D63CEC163DCB7FD9C63D3B36AFF596B522C8F31E18364B46B
pass1=98AE1EAE0B88

Или вот генератор ini файла:
Код:
#Include <String.au3>
$sSettings_ini = @ScriptDir & "\settings.ini" ; путь к ini файлу
$sSecret = "super_secret_data!!!"
$pass1 = "god"
$pass2 = "qwerty"
$seSecret1 = _StringEncrypt(1, $sSecret, $pass1, 1)
$seSecretPass = _StringEncrypt(1, $pass1, $pass2, 1)
If FileExists ($sSettings_ini) = 0 Then ; если ini файла не существует, то
	$hSettings_ini = FileOpen ($sSettings_ini, 2) ; создаём его
	FileWrite ($hSettings_ini, "[crypt]"&@CRLF&"string="&@CRLF&"pass1=")
	FileClose ($hSettings_ini)
EndIf
IniWrite ($sSettings_ini, "crypt", "string", $seSecret1)
IniWrite ($sSettings_ini, "crypt", "pass1", $seSecretPass)
 
Верх