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

Вниз

шифрация данных в текстовом файле   Найти похожие ветки 

 
olevacho_ ©   (2005-06-28 15:15) [0]

Нужно добавить в прогу возможность сохранять данные в текстовом файле но зашифрованными. Потом считывать эти данные другой прогой с алгоритмом расшифровки. Как это сделать практически?


 
TUser ©   (2005-06-28 15:19) [1]

Нормальные способы шифрования сделают из текста бинарник. А тебе придется использовать к-л шифры замены и/или подстановки, что легко ломается.


 
uny ©   (2005-06-28 15:35) [2]

бинарник легко записывается в текстовый файл, если каждый байт записывать двумя - используя 16-ричное представление, т.е. 0..f
255=ff, в виндовс калькуляторе тип hex


 
Erik1 ©   (2005-06-28 15:37) [3]

А что делает текстовой фаил, текстовым? Можеш просто заархивировать с паролем или использовать спецальные библиотеки для шифрования.


 
iskatel ©   (2005-06-28 15:37) [4]

еще легче бинарник записывается в текст спец созданными для этого алгоритмами UU, MIME, Base64 , для MIME даже компонент стандартный есть )))


 
iskatel ©   (2005-06-28 15:40) [5]

PS как впрочем и для остальных, на вкладке indy misc


 
gydvin   (2005-06-28 19:13) [6]

Вот попробуй

Вот ужасно простой пример XOR шифрования - работает без глюков.

function kode(k,t:string):string;
   var key, text, longkey, result : string;

i : integer;
toto, c : char;
begin

text:=t;
key:=k;
for i := 0 to (length(text) div length(key)) do
longkey := longkey + key;

for i := 1 to length(text) do begin
toto := chr((ord(text[i]) XOR ord(longkey[i]))); // XOR алгоритм
result := result + toto;
end;
end;  

вызов
s:=kode(#1#2#3,"Mama")


 
gydvin   (2005-06-28 19:20) [7]

Но сам этот код всетаки работает нестабильно. Надо ключ подбирать. Это которая key связано это с тем что код изменяемого в данный момент символа в этом коде может выскочить за пределы 1-256, но если поставить проверку на это дело так довольнотаки ничего.


 
TStas ©   (2005-06-28 19:58) [8]

Есть такой алгоритм шифрования "по книге". Он не такой сложный на самом деле. Переводит текст в текст. Сломать его какими-то простыми способами невозможно. Нужно только написать две функции - расшифровка и шифрования. Притом они пишутся один раз и навсегда, меняется только текст "книга" по которой шифруют. Если это интересует, могу его описать


 
Starcom   (2005-06-28 20:02) [9]

TStas ©   (28.06.05 19:58) [8]

Интересует ... Плиз!

С уважением starcom! :7)


 
Anatoly Podgoretsky ©   (2005-06-28 20:12) [10]

gydvin   (28.06.05 19:13) [6]
Вопрос не столько про шифрование, а про текстовый файл, который должен остаться текстовым.


 
Radgar ©   (2005-06-28 20:17) [11]

Есть такой "алгоритм"

Сначало идет какой либо текст, потом цифры типа ##-##-## (#-цифра). Первая цифра означает предложение, вторая - слово, третья - буква.


 
uny ©   (2005-06-28 20:26) [12]

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


 
TStas ©   (2005-06-28 20:40) [13]

const
 keyText="âîò ïî ýòîé ñòðî÷êå è øèôðóåòñÿ âñå";

function encode(str:String):String; //Øèôðóåò ñòðîêó
var
 s1:String;
 i, ln, n:Integer;
 b:Byte;
begin
ln:=Length(str);
n:=ln div Length(keyText)+1; //Ñêîëüêî ðàç íóæíî ïîñòîðèòü øèôðóþùóþ ñòðîêó
s1:=""; //Ñòðîêà, ïîâòîðÿþùàÿ øèôðóþùóþ, íî íóæíîé äëèííû
for i:=1 to n do s1:=s1+keyText;
SetLength(s1, ln); //Äåëàþ íóæíîé äëèííû ñòðîêó
Result:="";
for i:=1 to ln do
 begin
 b:=(Ord(str[i])+Ord(s1[i])) mod 255; //Ñêëàäûâàþ "íîìåðà â ðàñøèðåííîì àëôàâèòå" è áåðó ïî mod 255
 Result:=Result+Char(b);
 end;
end;

function decode(str:String):String; //Ðàñøèôðîâûâàåò ñòðîêó
var
 s1:String;
 i, ln, n, b:Integer;

begin
ln:=Length(str);
n:=ln div Length(keyText)+1; //Ñêîëüêî ðàç íóæíî ïîñòîðèòü øèôðóþùóþ ñòðîêó (êëþ÷)
s1:=""; //Ñòðîêà, ïîâòîðÿþùàÿ øèôðóþùóþ, íî íóæíîé äëèííû
for i:=1 to n do s1:=s1+keyText;
SetLength(s1, ln); //Äåëàþ íóæíîé äëèííû ñòðîêó
Result:="";
for i:=1 to ln do
 begin
 b:=(Ord(str[i])-Ord(s1[i])); //Âû÷èòàþ "íîìåðà â ðàñøèðåííîì àëôàâèòå"
 if b<0 then b:=b+255;
 Result:=Result+Char(b);
 end;
end;


 
TStas ©   (2005-06-28 20:46) [14]

К сожалению слетела коддировка. Краткое пояснение, это, правда, чуть проще, чем по книге. Расширенным алфавитом для простоты считаем #0..#255.
keyText - строка, по которой шифруем. Выбирается по вкусу.
В функции encode повторяем ее необходимое число раз и пишем над шифруемой строкой. Складывает их "номера в расширенном" алфавите, т. есть ord. Если результат больше 255, берем по модулю 255. Получится некая строка.
Расшифровывается точно так же, только не складывается, а вычитается.

То есть взяли текст - получила текст. Сломать пароль весьма сложно.


 
Starcom   (2005-06-28 21:39) [15]

TStas ©   (28.06.05 20:46) [14]

К сожалению слетела коддировка.

А ещё раз нелзя написать, без слёта.

Пояснения мне тоже важны!

С Уважением Starcom! 8-(


 
gydvin   (2005-06-28 23:13) [16]

Anatoly Podgoretsky ©   (28.06.05 20:12) [10]
Вопрос не столько про шифрование, а про текстовый файл, который должен остаться текстовым.


А в чем проблемы, закидываешь строку получаешь стороку пишешь в файл, читаешь из файла опять прогоняешь функцией получаешь искомое.
и опять же функция требует дороботки. чтобы невыскочило запределы 1-255, а также, как и в выше преведенных примерах чтобы при кодировании символы не менялись на знаки каретки #13#10 это в том случае если файл многострочный.


 
TStas ©   (2005-06-29 19:36) [17]

const
 keyText=а по этой строчке все и шифруем, она может быть любой;
 extABC="abcdefghijklmnopqrstuvwxyz&#224;&#225;&#226;&#227;&#228;&#229;&#184;&#230;&#231;&#232;&#233;&#234;&#235;&#236;&# 237;&#238;&#239;&#240;&#241;&#242;&#243;&#244;&#245;&#246;&#247;&#248;&#249;&#252;&#251;&#250;&#253;&#254;&#255;ABCDEFGH IJKLMNOPQRSTUVWXYZ&#192;&#193;&#194;&#195;&#196;&#197;&#168;&#198;&#199;&#200;&#201;&#202;&#203;&#204;&#205;&#206;&#207; &#208;&#209;&#210;&#211;&#212;&#213;&#214;&#215;&#216;&#217;&#220;&#219;&#218;&#221;&#222;&#223;`~!@#$%^&*()_+|-=\/{}[]< >?;:"&#185; "+#39#13#10#9; //На месте слетевших символово были русские буквы в обоих регистрах и прочие кириллические символы, это расширеннй алфавит.
У вчерашних функций есть маленький недостаток - может в кодированном тексте образоваться EOF, здесь недостаток устранен, все, кстати, проверял и все работает

function GetSymNum(C:Char):Byte; //Возвращает порядковый номер символа в расширенном алфавите
var i:Byte;
begin
Result:=0;
for i:=1 to Length(extABC) do
 begin
 if c=extABC[i] then
   begin
   Result:=i;
   exit;
   end;
 end;
end;

function encode(str:String):String;
var
 s1:String;
 i, ln, extLn, n:Integer;
 b:Byte;
begin
extLn:=Length(extABC);
ln:=Length(str);
n:=ln div Length(keyText)+1;
s1:="";
for i:=1 to n do s1:=s1+keyText;
SetLength(s1, ln); //Повторяет, если надо шифрующую строку до длинны той, которую шифруем
Result:="";
for i:=1 to ln do
 begin
 b:=(GetSymNum(str[i])+GetSymNum(s1[i])) mod extLn; //Складывает номера символов в расширенном алфавите, и берем по мод алфавита
 Result:=Result+extABC[b];
 end;
end;

function decode(str:String):String; //
var
 s1:String;
 i, ln, n, b, extLn:Integer;

begin
extLn:=Length(extABC);
ln:=Length(str);
n:=ln div Length(keyText)+1;
s1:="";
for i:=1 to n do s1:=s1+keyText;
SetLength(s1, ln); //То же самое
Result:="";
for i:=1 to ln do
 begin
 b:=(GetSymNum(str[i])-GetSymNum(s1[i])); //А здесь вычитаем
 if b<0 then b:=b+extLn;
 Result:=Result+extABC[b];
 end;
end;

Это очень просто, но почти не взламываемый алгоритм шифрования, притом текст, ПО которому шифруем можно менять



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

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

Наверх




Память: 0.52 MB
Время: 0.061 c
1-1120226418
jagr
2005-07-01 18:00
2005.07.18
Умножение матрицы на вектор с небольшой загвоздкой


14-1119631258
Kerk
2005-06-24 20:40
2005.07.18
Флудеры - кто они?


8-1110745845
-=DeMoH=-
2005-03-13 23:30
2005.07.18
Нарисовать объект по формулам в OpenGL!


14-1119443440
Магнум
2005-06-22 16:30
2005.07.18
Windows Task Manager в Windows XP


1-1120128240
Cat
2005-06-30 14:44
2005.07.18
Динамический массив