Форум: "Начинающим";
Текущий архив: 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.038 c