![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
XOR алгоритм
Denis_ © (2007-09-16 15:56:00)Несколько раз встречал здесь вопрос о таком методе шифрования, и стало интересно , как его реализовать.Как?
Инс (2007-09-16 18:56:00) [61]
> [24] Anatoly Podgoretsky © (16.09.07 18:52)
Я понимаю, что после XOR строки уже не будет, но полученные двоичные данные можно перевести в строку, чтобы посмотреть, что же у нас в результате шифрования получилось.
Anatoly Podgoretsky (2007-09-16 18:52:00) [62]> Инс (16.09.2007 18:51:23) [23]
Нет смысла, достаточно простого понимания, что такое строка, не путать с типом string и как работает XOR
Инс (2007-09-16 18:51:00) [63]
> [22] Anatoly Podgoretsky © (16.09.07 18:47)
Ну давайте поговорим :)
Anatoly Podgoretsky (2007-09-16 18:47:00) [64]> Инс (16.09.2007 18:44:21) [21]
Лучше говорить про голову, которая здесь не применялась.
Инс (2007-09-16 18:44:00) [65]
> [20] Anatoly Podgoretsky © (16.09.07 18:40)
Сейчас снова скажу про Hex или Base64 :) Ладно, баян, не скажу...
Anatoly Podgoretsky (2007-09-16 18:40:00) [66]Почему тут вывод в строковые органы, после шифрации результат не является строкой.
{RASkov} (2007-09-16 18:35:00) [67]Т.е. модуль pas замени на этот:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button2: TButton;
Button1: TButton;
Edit4: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
function XOR_Algoritm(s : String;b : Integer):String;
var
i : Integer;
begin
Result:='';
for i:=1 to length(s) do
Result:=Result+Chr(Ord(s[i]) xor b);
end;
var S: String;
procedure TForm1.Button1Click(Sender: TObject);
begin
S:=XOR_Algoritm(Edit2.Text, StrToIntDef(Edit1.Text, 0));
Edit3.Text:=S;
Edit4.Text:='';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit4.Text:=XOR_Algoritm(Edit3.Text, StrToIntDef(Edit1.Text, 0));
Caption:=XOR_Algoritm(S, StrToIntDef(Edit1.Text, 0));
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
try
Label1.Caption:=CHR(StrToInt(Edit1.Text));
except
Label1.Caption:='Error';
end;
end;
end.
Изменения выделены жирным....
так более понятнее будет, что же имелось ввиду про работу/неработу этого алгоритма.
Сергей М. (2007-09-16 18:33:00) [68]
> Denis_
"Фигня", "Пудрить мозги" ..
Ты только сленгомвладеешь ?)
Хорошо, легче ли тебе станет, если я скажу, что строка, зашифрованная по твоему алгоритму, перестает быть ожидаемой тобой строкой, ибо в ней после твоего шифрования потенциально присутствуют символ-терминатор ?
Инс (2007-09-16 18:33:00) [69]
> Хотя возможно в статье по ссылке из [12] это сказано...
В статье из [12] про алгоритм XOR не сказано ничего :) Бо как самостоятельный этот алгоритм практической пользы не имеет, разве что как часть какого-либо другого.
{RASkov} (2007-09-16 18:30:00) [70]> [3] Denis_ © (16.09.07 17:04)
> но вдруг есть моменты, при которых это работать не будет?
Есть такие, например когда ключ совпадает с кодом символа,
но это не проблема и работать при этом будет, только нужно это учитывать в некоторых случаях...
Вот глянь я тебе для примера накидал, нагляднее лучше поймешь, что я хотел сказать.
object Form1: TForm1
Left = 192
Top = 114
Width = 428
Height = 131
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 236
Top = 8
Width = 6
Height = 13
Caption = 'в'
end
object Edit1: TEdit
Left = 176
Top = 4
Width = 53
Height = 21
TabOrder = 0
Text = '226'
OnChange = Edit1Change
end
object Edit2: TEdit
Left = 4
Top = 32
Width = 121
Height = 21
TabOrder = 1
Text = 'слово'
end
object Edit3: TEdit
Left = 144
Top = 32
Width = 121
Height = 21
TabOrder = 2
Text = 'Edit3'
end
object Button2: TButton
Left = 236
Top = 64
Width = 85
Height = 25
Caption = 'Расшифровать'
TabOrder = 3
OnClick = Button2Click
end
object Button1: TButton
Left = 92
Top = 64
Width = 89
Height = 25
Caption = 'Зашифровать'
TabOrder = 4
OnClick = Button1Click
end
object Edit4: TEdit
Left = 284
Top = 32
Width = 125
Height = 21
TabOrder = 5
Text = 'Edit4'
end
end
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button2: TButton;
Button1: TButton;
Edit4: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
//Оставил для простоты примера.
function XOR_Algoritm(s : String;b : Integer):String;
var
i : Integer;
begin
Result:='';
for i:=1 to length(s) do
Result:=Result+Chr(Ord(s[i]) xor b);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit3.Text:=XOR_Algoritm(Edit2.Text, StrToIntDef(Edit1.Text, 0));
Edit4.Text:='';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit4.Text:=XOR_Algoritm(Edit3.Text, StrToIntDef(Edit1.Text, 0));
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
try
Label1.Caption:=CHR(StrToInt(Edit1.Text));
except
Label1.Caption:='Error';
end;
end;
end.
Хотя возможно в статье по ссылке из [12] это сказано...
app (2007-09-16 18:30:00) [71]> Denis_ (16.09.2007 18:23:14) [14]
А вы подеритесь
Denis_ (2007-09-16 18:23:00) [72]Инс, спасибо!
А Вам, Сергей не мешало бы подумать над [11].То, что Вы старше и опытнее, не даёт Вам права пудрить мне мозги.
Сергей М. (2007-09-16 18:13:00) [73]
> по которому есть сомнения
Какие конкретно ?
Использование твентинейджерского термина "Какая-нибудь фигня" не оправдывает даже начинающего.
Инс (2007-09-16 18:00:00) [74]
> Что за шифрование, когда используется число, которое раскладывается
> на 2 простых множителя, и для расшифровки информации нужны
> эти множители?
Это алгоритм RSA, почитай это:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1271
Denis_ (2007-09-16 17:43:00) [75]Извините, Сергей, я не пойму чего-то. Конференция "Начинающим", а не "Мастерам". Я автор вопроса, и имею права задать вопрос, по которому есть сомнения. Если Вы не можете сказать ничего конкретного по сути вороста, то, пожалуйста, не надо писать неинформативных постов. Я говорю это, так как из трёх ваших постов нельзя выцедить ни байта полезной информации(Кроме [10]).Извините, если обидел.
Сергей М. (2007-09-16 17:36:00) [76]Бо ты манипулируешь массивом символов как массивом байт.
При этом "фигня" тебе обеспечена)
Сергей М. (2007-09-16 17:34:00) [77]
> Я просто спросил, не может ли быть какой-нибудь фигни пр
> использовании того кода, который я написал
Эта фигня обязательно найдется
Denis_ (2007-09-16 17:30:00) [78]
> Вот по каждому из этих "либо" и задавай отдельный вопрос.
Я просто спросил, не может ли быть какой-нибудь фигни пр использовании того кода, который я написал.Давайте закроем тему про "либо".
------------------------------------
Появился ещё вопросик :
Что за шифрование, когда используется число, которое раскладывается на 2 простых множителя, и для расшифровки информации нужны эти множители?
Сергей М. (2007-09-16 17:25:00) [79]
> Denis_ © (16.09.07 17:12) [6]
Вот по каждому из этих "либо" и задавай отдельный вопрос.
Denis_ (2007-09-16 17:12:00) [80]
> Что такое "работать не будет" ?
"работать не будет" - это когда ф-ция выдаёт ошибку, либо строка потом не расшифровывается, либо ещё что-нибудь.
> OSokin © (16.09.07 17:08) [4]
Спасибо!