Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
Внизшифрация данных в текстовом файле Найти похожие ветки
← →
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àáâãäå¸æçèéêëì&# 237;îïðñòóôõö÷øùüûúýþÿABCDEFGH IJKLMNOPQRSTUVWXYZÀÁÂÃÄŨÆÇÈÉÊËÌÍÎÏ ÐÑÒÓÔÕÖ×ØÙÜÛÚÝÞß`~!@#$%^&*()_+|-=\/{}[]< >?;:"¹ "+#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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.038 c