Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.11;
Скачать: CL | DM;

Вниз

Алгоритм шифрования   Найти похожие ветки 

 
Dark_blue   (2007-10-16 14:25) [0]

Приветствую уважаемые мастера подскажите мне пожалуйста простой код для шифрования и дешифрования информации. То есть у меня есть текстовый файл мне нужно его зашифровать, затем в другой программе загрузить информацию из файла, но уже расшифрованную, как это сделать?


 
Сергей М. ©   (2007-10-16 14:33) [1]

var
 ms: TMemoryStream;
 i: Integer;
 Key: Byte; //ключ шифрования
..

ms := TMemoryStream.Create;
try
 ms.LoadFromFile("MyFile.txt");
 for i:= 0 to ms.Size - 1 do
   PByteArray(ms.Memory)[i] := PByteArray(ms.Memory)[i] xor Key;
 ms.SaveToFile("MyFile.txt");  
finally
 ms.Free;
end;


 
Dark_blue   (2007-10-16 14:39) [2]

Я так понимаю этот код для шифрования а не для дешифрования?


 
Ins ©   (2007-10-16 14:41) [3]


> Dark_blue   (16.10.07 14:25)

А от кого защищаетесь? От младшей сестренки? :)


 
Сергей М. ©   (2007-10-16 14:44) [4]


> этот код для шифрования а не для дешифрования?


И для того и для другого.

Один раз запустил - файл зашифрован, второй раз запустил (с тем же ключем)  - расшифрован.


 
Dark_blue   (2007-10-16 14:48) [5]

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


 
Сергей М. ©   (2007-10-16 14:51) [6]


> Если бы я написал прогу для создания контролирующих тестов


Если б да кабы)


 
Ins ©   (2007-10-16 14:52) [7]


> Dark_blue   (16.10.07 14:48) [5]

Предлагаю вместо ответов в файле хранить их хеш. А потом просто высчитывать хеш от введенного пользователем ответа и сравнивать. Это будет лучше (ИМХО). Но если не охота париться, [1] тебе вполне подойдет.


 
Ins ©   (2007-10-16 14:53) [8]


> Сергей М. ©   (16.10.07 14:51) [6]

Я так понимаю, после "бы" подразумевается запятая :)


 
Dark_blue   (2007-10-16 15:00) [9]

Ins ©   (16.10.07 14:52) [7]
Лично я знаю только один алгоритм для получения хеш, и этот метод допускает одно и тоже значени хэш для разных ответов


 
Сергей М. ©   (2007-10-16 15:01) [10]


> Ins ©   (16.10.07 14:53) [8]


Не царское это дело - запятые ставить)


 
Ins ©   (2007-10-16 15:02) [11]


> Лично я знаю только один алгоритм для получения хеш, и этот
> метод допускает одно и тоже значени хэш для разных ответов

????????????????


 
Dark_blue   (2007-10-16 15:03) [12]

procedure TForm1.Button1Click(Sender: TObject);
var
ms: TMemoryStream;
i: Integer;
Key: Byte; //êëþ÷ øèôðîâàíèÿ
begin

ms := TMemoryStream.Create;
try
ms.LoadFromFile("q.txt");
for i:= 0 to ms.Size - 1 do
  PByteArray(ms.Memory)[i] := PByteArray(ms.Memory)[i] xor Key;
ms.SaveToFile("q.txt");
finally
ms.Free;
end;
Я правельно сделал или нет если да то ничего не работает!


 
Германн ©   (2007-10-16 15:07) [13]

А потом он попробует этот файл загрузить в мемо.
Да не остынут кнопки на наших клавиатурах!
:-)


 
Сергей М. ©   (2007-10-16 15:08) [14]


> ничего не работает


Что, прямо так и говорит - "ничего не работает" ?)

p.s. Любезный, изволь все-таки расставлять знаки препинания там где им положено находиться по правилам русского языка)


 
Сергей М. ©   (2007-10-16 15:09) [15]


> Германн ©   (16.10.07 15:07) [13]


Это уже его личная половая драма)


 
Dark_blue   (2007-10-16 15:09) [16]

Хорошо, но только после того, как я узнаю, почему алгоритм не шифрует информацию


 
Сергей М. ©   (2007-10-16 15:11) [17]


> почему алгоритм не шифрует информацию


А у меня шифрует.

Что я делаю не так ?


 
Германн ©   (2007-10-16 15:18) [18]


> Dark_blue   (16.10.07 15:09) [16]
>
> Хорошо, но только после того, как я узнаю, почему алгоритм
> не шифрует информацию
>

А головой подумать? О смысле жизни и о значении ключа?


 
Сергей М. ©   (2007-10-16 15:24) [19]


> Германн ©   (16.10.07 15:18) [18]


Не царское это дело - головой думать)

Проще пытаться открыть дверной замок ключем от другого замка и жаловаться при этом на превратности судьбы)


 
Dark_blue   (2007-10-16 15:28) [20]

Я понял я не указал ключ


 
Ins ©   (2007-10-16 15:29) [21]


> Я понял я не указал ключ

Может у него запятая не работает на клавиатуре...


 
Сергей М. ©   (2007-10-16 15:32) [22]


> Dark_blue   (16.10.07 15:28) [20]
> я не указал ключ


Ключ можно и не указывать, это уж как тебе вздумается)

Но неуказание ключа никоим образом не говорит о том, что "алгоритм не шифрует информацию", так что ври да не завирайся)


 
Маша Шрайбер ©   (2007-10-16 15:44) [23]

>> Сергей М. ©   (16.10.07 15:08) [14]
>> p.s. Любезный, изволь все-таки расставлять знаки препинания там где им положено находиться по правилам русского языка)

Интересное предложение с т.з. расстановки знаков препинания там, где им положено находиться :)))))


 
Сергей М. ©   (2007-10-16 16:02) [24]


> Маша Шрайбер ©   (16.10.07 15:44) [23]


Смысл понятен ? Понятен).. А вот в [5] - нет.

Так что следи за своим бревном)


 
Маша Шрайбер ©   (2007-10-17 10:46) [25]

>> Сергей М. ©   (16.10.07 16:02) [24]
>> Так что следи за своим бревном)

С удовольствием. А где оно?


 
FIL-23   (2007-10-17 11:22) [26]

короче ... можно проще сделать просто каждый символ переведи в бинарный код и смести его по функции xor  на определенную цифру.... получится полная ерунда из цифр))).... а потом тем же самым xor ом  на тоже число смести его обратно..... и получится очень просто и сердито)))


 
pathfinder   (2007-10-17 12:05) [27]


> Сергей М. ©   (16.10.07 14:33) [1]


Сергей, а почему ваш код работает с большими файлами, если тип TByteArray может содержать только до 32767 элементов?


 
Сергей М. ©   (2007-10-17 12:08) [28]


> pathfinder   (17.10.07 12:05) [27]


А где в коде использование этого типа, тем более данных этого типа ?


 
pathfinder   (2007-10-17 12:16) [29]


> Сергей М. ©   (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:22) [30]


> pathfinder   (17.10.07 12:16) [29]


При отключенной опции компилятора Range Checking к массиву можно спокойно обращаться по любому значению индекса, а не только входящему в определенный типом диапазон.


 
pathfinder   (2007-10-17 12:32) [31]


> Сергей М. ©   (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 16:02) [32]


> Корректен ли данный код,


Не корректен.

Должен быть вложенный цикл.


 
Leonid Troyanovsky ©   (2007-10-17 16:17) [33]


> Сергей М. ©   (17.10.07 16:02) [32]

> Должен быть вложенный цикл.

А на зачем?

--
Regards, LVT.


 
Сергей М. ©   (2007-10-17 16:24) [34]


> Leonid Troyanovsky ©   (17.10.07 16:17) [33]


Для усложнения жизни вражеских разведок)


 
pathfinder   (2007-10-17 16:25) [35]


> Сергей М. ©   (17.10.07 16:02) [32]



> Должен быть вложенный цикл.


Это как?


 
Сергей М. ©   (2007-10-17 16:50) [36]

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);


 
Германн ©   (2007-10-17 17:11) [37]


> Сергей М. ©   (17.10.07 16:24) [34]

Спер мою идею 12-ти летней давности :-)


 
Сергей М. ©   (2007-10-17 17:14) [38]


> Германн ©   (17.10.07 17:11) [37]


В этом дерьмовом мире ни одна гениальная идея не рождается без плагиата)


 
Leonid Troyanovsky ©   (2007-10-17 18:03) [39]


> Сергей М. ©   (17.10.07 16:50) [36]

>      DataBuffer[i+j] := DataBuffer[i+j] xor KeyBuffer[j];

Ну, а вопрошающий второй цикл реализовал собс-ручно.
Т.е., почему ж некорректен?

Хотя, я бы предпочел что-то вроде:
DataPos^ :=  DataPos^  xor
                  Byte(KeyBuffer[(DataPos + i) mod KeyLength]);

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2007-10-17 18:05) [40]


> Германн ©   (17.10.07 17:11) [37]

> Спер мою идею 12-ти летней давности :-)

Если ты про саму идею, то ей уж века 3,
квадрат Виженера зовут.

--
Regards, LVT.



Страницы: 1 2 вся ветка

Текущий архив: 2007.11.11;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.027 c
2-1192786979
Aladdinych
2007-10-19 13:42
2007.11.11
Как создать почтовой сообщение


2-1192895025
StanislavLZ
2007-10-20 19:43
2007.11.11
Два вопроса по TMemo


8-1168776768
andr1962
2007-01-14 15:12
2007.11.11
Помогите с directdraw


15-1191508929
Ega23
2007-10-04 18:42
2007.11.11
Рыдал


3-1183115535
Mamed
2007-06-29 15:12
2007.11.11
"Could not convert variant of type (null) into type (Olestr)"