![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Алгоритм шифрования [D7, WinXP]
Dark_blue © (2007-10-16 14:25:00)Приветствую уважаемые мастера подскажите мне пожалуйста простой код для шифрования и дешифрования информации. То есть у меня есть текстовый файл мне нужно его зашифровать, затем в другой программе загрузить информацию из файла, но уже расшифрованную, как это сделать?
Германн (2007-10-17 18:11:00) [1]
> Leonid Troyanovsky © (17.10.07 18:05) [40]
>
>
> > Германн © (17.10.07 17:11) [37]
>
> > Спер мою идею 12-ти летней давности :-)
>
> Если ты про саму идею, то ей уж века 3,
> квадрат Виженера зовут.
>
Я про идею в сочетании с фразой "
> Для усложнения жизни вражеских разведок
"
Примерно этими же словами я ответил начальству, которое потребовало шифрования обмена с контроллерами. :-)
Leonid Troyanovsky (2007-10-17 18:05:00) [2]
> Германн © (17.10.07 17:11) [37]
> Спер мою идею 12-ти летней давности :-)
Если ты про саму идею, то ей уж века 3,
квадрат Виженера зовут.
--
Regards, LVT.
Leonid Troyanovsky (2007-10-17 18:03:00) [3]
> Сергей М. © (17.10.07 16:50) [36]
> DataBuffer[i+j] := DataBuffer[i+j] xor KeyBuffer[j];
Ну, а вопрошающий второй цикл реализовал собс-ручно.
Т.е., почему ж некорректен?
Хотя, я бы предпочел что-то вроде:
DataPos^ := DataPos^ xor
Byte(KeyBuffer[(DataPos + i) modKeyLength]);
--
Regards, LVT.
Сергей М. (2007-10-17 17:14:00) [4]
> Германн © (17.10.07 17:11) [37]
В этом дерьмовом мире ни одна гениальная идея не рождается без плагиата)
Германн (2007-10-17 17:11:00) [5]
> Сергей М. © (17.10.07 16:24) [34]
Спер мою идею 12-ти летней давности :-)
Сергей М. (2007-10-17 16:50:00) [6]procedure Chipher(DataBuffer: PByteArray; DataLength: Integer; KeyBuffer: PByteArray; KeyLength: Integer);
var
i, j: Integer;
begin
for i := 0 to Abs(DataLength - KeyLength) - 1 do
for j := 0 to Min(DataLength, KeyLength) - 1 do
DataBuffer[i+j] := DataBuffer[i+j] xor KeyBuffer[j];
end;
var s, k: String;
..
s := 'ABCDEFGH';
k := #$55#$22#$55;
Chipher(PByteArray(@s[1]), Length(s), PByteArray(@k[1]), Length(k));
ShowMessage(s);
Chipher(PByteArray(@s[1]), Length(s), PByteArray(@k[1]), Length(k));
ShowMessage(s);
pathfinder (2007-10-17 16:25:00) [7]
> Сергей М. © (17.10.07 16:02) [32]
> Должен быть вложенный цикл.
Это как?
Сергей М. (2007-10-17 16:24:00) [8]
> Leonid Troyanovsky © (17.10.07 16:17) [33]
Для усложнения жизни вражеских разведок)
Leonid Troyanovsky (2007-10-17 16:17:00) [9]
> Сергей М. © (17.10.07 16:02) [32]
> Должен быть вложенный цикл.
А на зачем?
--
Regards, LVT.
Сергей М. (2007-10-17 16:02:00) [10]
> Корректен ли данный код,
Не корректен.
Должен быть вложенный цикл.
pathfinder (2007-10-17 12:32:00) [11]
> Сергей М. © (17.10.07 12:22) [30]
Будем знать. Спасибо:)
Я тут попробовал набросать аналогичную процедуру для шифрования с ключом больше 1 байта. Получилось что-то такое:
procedure Ciphering(DataBuffer: Pointer; DataLength: Integer;
KeyBuffer: Pointer; KeyLength: Integer);
var
DataPos, KeyPos: PByte;
KeyCnt, i: Integer;
begin
DataPos := DataBuffer;
KeyPos := KeyBuffer;
KeyCnt := 1;
for i := 1 to DataLength do begin
if KeyCnt > KeyLength then
KeyPos := KeyBuffer;
DataPos^ := DataPos^ xor KeyPos^;
Inc(DataPos);
Inc(KeyPos);
Inc(KeyCnt);
end;
end;
Корректен ли данный код, или стоит что-то подправить?
Сергей М. (2007-10-17 12:22:00) [12]
> pathfinder (17.10.07 12:16) [29]
При отключенной опции компилятора Range Checking к массиву можно спокойно обращаться по любому значению индекса, а не только входящему в определенный типом диапазон.
pathfinder (2007-10-17 12:16:00) [13]
> Сергей М. © (17.10.07 12:08) [28]
Вот здесь:
> PByteArray(ms.Memory)[i] := PByteArray(ms.Memory)[i] xor Key;
PByteArray = ^TByteArray;
TByteArray = array[0..32767] of Byte;
Сергей М. (2007-10-17 12:08:00) [14]
> pathfinder (17.10.07 12:05) [27]
А где в коде использование этого типа, тем более данныхэтого типа ?
pathfinder (2007-10-17 12:05:00) [15]
> Сергей М. © (16.10.07 14:33) [1]
Сергей, а почему ваш код работает с большими файлами, если тип TByteArray может содержать только до 32767 элементов?
FIL-23 (2007-10-17 11:22:00) [16]короче ... можно проще сделать просто каждый символ переведи в бинарный код и смести его по функции xor на определенную цифру.... получится полная ерунда из цифр))).... а потом тем же самым xor ом на тоже число смести его обратно..... и получится очень просто и сердито)))
Маша Шрайбер (2007-10-17 10:46:00) [17]>> Сергей М. © (16.10.07 16:02) [24]
>> Так что следи за своим бревном)
С удовольствием. А где оно?
Сергей М. (2007-10-16 16:02:00) [18]
> Маша Шрайбер © (16.10.07 15:44) [23]
Смысл понятен ? Понятен).. А вот в [5] - нет.
Так что следи за своим бревном)
Маша Шрайбер (2007-10-16 15:44:00) [19]>> Сергей М. © (16.10.07 15:08) [14]
>> p.s. Любезный, изволь все-таки расставлять знаки препинания там где им положено находиться по правилам русского языка)
Интересное предложение с т.з. расстановки знаков препинания там, где им положено находиться :)))))
Сергей М. (2007-10-16 15:32:00) [20]
> Dark_blue (16.10.07 15:28) [20]
> я не указал ключ
Ключ можно и не указывать, это уж как тебе вздумается)
Но неуказание ключа никоим образом не говорит о том, что "алгоритм не шифрует информацию", так что ври да не завирайся)