Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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&#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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.038 c
14-1119391696
ЦУКОР5
2005-06-22 02:08
2005.07.18
В Edit только цифры


1-1119780267
Euro
2005-06-26 14:04
2005.07.18
Canvas


1-1119693968
Duck
2005-06-25 14:06
2005.07.18
Освобождение памяти


9-1112783898
@!!ex
2005-04-06 14:38
2005.07.18
Пересечение объектов.


1-1119873973
Dr. Genius
2005-06-27 16:06
2005.07.18
Ошибка при переводе Bmp в Wmf





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский