Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.05 c
3-1182675084
Псалтырь
2007-06-24 12:51
2007.11.11
Delphi ADO асинхронно


2-1192460045
фыва
2007-10-15 18:54
2007.11.11
буфер обмена


5-1162664413
dbnz3
2006-11-04 21:20
2007.11.11
вопрос


2-1192180654
Ega23
2007-10-12 13:17
2007.11.11
Как убить объект из его же метода?


15-1191667488
Denis_
2007-10-06 14:44
2007.11.11
Можно ли узнать, чем откомпилина прграмма?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский