Способ зашифровать единственный интервал

Вы можете создать семафор и остановить выполнение (поместить код в файл * .dpr) и вывести на экран запущенное приложение.

var
  Semafor: THandle;

begin
  { Don't start twice ... if already running bring this instance to front }
  Semafor := CreateSemaphore(nil, 0, 1, 'MY_APPLICATION_IS_RUNNING');
  if ((Semafor <> 0) and { application is already running }
     (GetLastError = ERROR_ALREADY_EXISTS)) then 
  begin
    RestoreWindow('TMyApplication');
    CloseHandle(Semafor);
    Halt;
  end;

  Application.CreateForm(....);    
  Application.Initialize;
  Application.Run;
  CloseHandle(Semafor);
end;

РЕДАКТИРОВАТЬ (добавлен метод RestoreWindow):

aFormName - это имя вашего основного класса формы в вашем приложении.

procedure RestoreWindow(aFormName: string);
var
  Wnd,
  App: HWND;    
begin
  Wnd := FindWindow(PChar(aFormName), nil);
  if (Wnd <> 0) then 
  begin { Set Window to foreground }
    App := GetWindowLong(Wnd, GWL_HWNDPARENT);
    if IsIconic(App) then 
      ShowWindow(App, SW_RESTORE);

    SetForegroundwindow(App);
  end;
end;
9
задан ʞɔıu 6 June 2009 в 15:22
поделиться

9 ответов

Вам нужен 32-битный блочный шифр. К сожалению, большинство блочных шифров являются 64-битными или более из-за недостатков небольшого размера блока . Если вы можете обрабатывать зашифрованный int, который вдвое больше, чем входной, тогда вы можете просто использовать Blowfish, TDES или какой-либо другой хорошо проверенный 64-битный блочный шифр.

Если вам действительно нужно 32 бита и вы не возражаете против снижения уровня безопасности, то достаточно просто обрезать сетевой шифр Фейстеля, такой как Blowfish, до любой длины блока, кратной 2 и меньшей, чем начальный шифр. Для Blowfish просто разделите входной номер поровну между двумя половинными блоками и обрежьте выходной сигнал функции F и P-значения до 1/2 вашего целевого размера блока. Все это можно сделать после обычного ввода алгоритма.

19
ответ дан 4 December 2019 в 07:05
поделиться

Очевидно, вам понадобится какой-то случайный ключ для его защиты. В этом случае:

int original = 42;
int key = give_me_a_random_int();

int encrypted = original ^ key;
int unencrypted = encrypted ^ key;

// now, unencrypted == original == 42

Это просто XOR. XOR снова обратит этот процесс.

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

7
ответ дан 4 December 2019 в 07:05
поделиться

Один из способов - выполнить XOR с секретным 32-битным числом. Когда вы снова выполните XOR с этим секретным числом, он вернется к исходному числу. Это быстро, но не очень безопасно. Если нужен безопасный метод, мне было бы интересно увидеть здесь и другие методы.

1
ответ дан 4 December 2019 в 07:05
поделиться

Используйте стандартный алгоритм и случайный блокнот (при условии, что зашифрованный текст не t должен быть такой же длины, как и плоский текст).

Итак, в основном, используйте стандартный алгоритм, который использует цепочку, и вставьте перед ним четыре случайных 32-битных числа. Это должно помочь скрыть любые закономерности / избыточности в вашем 32-битном сообщении. Черт возьми, и в конце тоже блокнот, если тебе так нравится.

В принципе, чем меньше ты пишешь, тем лучше тебе. Все облажались.

1
ответ дан 4 December 2019 в 07:05
поделиться

There are two simple and reversible operations that you can use to scramble an integer value. You can use the xor operation, and you can swap bits in the number.

If you use both, then it won't be that trivial to figure out the method used. They will somewhat protect each other.

0
ответ дан 4 December 2019 в 07:05
поделиться

Если все, что вам нужно, это что-то действительно простое, чего не заметит обычный пользователь, тогда используйте серию операторов XOR и сдвига.

Проблема с неиспользованием массива для хранения 4 миллиардов или Таким образом, INT - это то, что вам нужна функция, которая выполняет однозначное случайное сопоставление в домене из 4 миллиардов INT. Вы можете смешивать несколько операторов XOR и shift, чтобы создать свой собственный, но взломать его несложно. Даже если бы существовала хорошо известная карта один на один, она тоже не удалась. Без соли кто-то может просто сгенерировать простую радужную таблицу, чтобы разбить ее.

Проблема с солью при двустороннем взаимодействии состоит в том, что вы должны безопасно передать ее. Соли должны быть секретными, и если вы знаете, что они такое, они бессмысленны.

Если вы хотите настроить безопасный канал связи, обратите внимание на Протокол обмена сообщениями без записи версии 2 . Это даст вам пример того, насколько сложным может стать шифрование связи. Я предлагаю вам найти что-то хорошо известное, что кто-то уже создал и протестировал. Даже если вы используете что-то другое, созданное вами, если вы используете это неправильно, это не удастся.

0
ответ дан 4 December 2019 в 07:05
поделиться

Раньше я использовал XOR + ADD с 64-битным секретным ключом. Я также менял ключ каждые пару минут и пытался расшифровать текущий или предыдущий ключ. (В моем домене целое число не нужно было защищать более четырех минут.)

-1
ответ дан 4 December 2019 в 07:05
поделиться

Возьмите 32-битный ввод, разрежьте его на две 16-битные половины L и R, затем повторите следующие шаги: вычислить псевдослучайную функцию от R, xили результат этой псевдослучайной функции на L и поменять местами L и R. Это конструкция Luby-Rackoff . Псевдослучайная функция не обязательно должна быть обратимой. Так, например, вы можете взять блочный шифр, зашифровать 16 бит и сократить результат до 16 бит. Убедитесь, что не во всех раундах используется одна и та же псевдослучайная функция (в некоторых случаях используются разные клавиши раунда).

0
ответ дан 4 December 2019 в 07:05
поделиться

Используйте 32-битный блочный шифр, skip32 - единственный, который я нашел: http://www.qualcomm.com.au/PublicationsDocs/skip32.c

5
ответ дан 4 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: