Çeviri: Ramazan Gülbahar.
1) Karakter sıralarını değiştirerek basit bir encryption işlemi
Herhangi bir ASCII karakterinin sırasını gösteren tamsayı sırası ile bu değeri 4 arttırarak değeri dönüştürebiliriz, ve CHR uygulamasını kullanarak geri dönen numaraları kullanarak ASCII karakterini bulabiliriz.
Örnek olarak 'a' karakteri dört ayrı yerdeki karakteri değiştirir: 'e', 'b', 'f' gibi:
a b c d e f g h i j k l m n o p q r s t u v w x y z
e f g h i j k l m n o p q r s t u v w x y z { ¦ } ~
Sıralama değeri 'a'iken 97, artırılarak 101 olur (sıralama değerindeki yeri 'e' dir).
Karakterlerin dört kez değiştirilmesi bir encrypt işlemine, işlemin tersten yapılması bir decrypt işlemine neden olur:
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
var
sInput : String;
iCount, iLength : Integer;
begin
sInput := Edit1.Text;
iLength := Length(sInput);
form1.caption := chr(101);
FOR iCount := 1 to iLength do
begin
sInput[iCount] := chr(ord(sInput[iCount])+4); {Encode işlemi}
end;
Label1.caption := sInput; {Eencode edilmiş metni göster}
{Decode bölümü}
{Bu diğer bir procedure yerleştirilebilir.}
FOR iCount := 1 to iLength do
begin
sInput[iCount] := chr(ord(sInput[iCount])-4);
end;
Label2.caption := sInput;
end;
end.
Karakter satırı mesajının çift boyutunu hesapla. Mesaj soldan sağa sütunlardan okunarak encode edilmiş metin ortaya çıkar.
(#) Karakteri bütün boşluklara ve sona eklenir.
Örnek Metin: "This is an encryption program that encodes text." Aşşağıdaki metin gibi olur:
T h i s # i s # a n
# e n c r y p t i o
n # p r o g r a m #
t h a t # e n c o d
e s # t e x t . # #
Bu metin 48 karakterden fazla olur (Aralardaki boşluklar ile) Bu yüzden ikili karma işlemlerinde yaklaşık 50 arttırılmalıdır. Bu şekilde soldan sağa enkode edilmiş mesaj alınır.
Şifrelenmiş metin şu şekilde görünmelidir:
T#ntehe#hsinpa#scrtt#ro#eiygexsprnt#tac.aimo#no#d#
Bu örnek için sonuç:
Kod: Tümünü seç
var
Form1: TForm1;
arrMessage : array[1..10,1..100] of char; {2D array}
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
sInput, sEncode : String;
iCount, iLength, iHashNeed, iRow, iCol, iTotal, iWCount : Integer;
begin
RichEdit1.Clear;
iHashNeed := 0;
sInput := Edit1.Text;
iLength := Length(sInput);
if iLength MOD 10 <> 0 then { # karakteri gereklimi algıla}
begin
iHashNeed := (((iLength DIV 10) + 1) * 10) - iLength;
FOR iCount := 1 to iHashNeed DO
sInput := sInput + '#'
end;
FOR iCount := 1 to iLength DO {Boşlukları # karakterine dönüştür}
begin
if sInput[iCount] = ' ' then
sInput[iCount] := '#';
end;
iTotal := length(sInput) DIV 10;
iWCount := 0;
{ 10 sütuna mesaj gir}
FOR iRow := 1 to iTotal do
begin
FOR iCol := 1 to 10 do
begin
iWCount := iWCount + 1;
arrMessage[iCol, iRow] := sInput[iWCount];
end;
end;
{Mesajı oku ve 1 satırda göster}
sEncode := '';
FOR iCol := 1 to 10 do
begin
FOR iRow := 1 to iTotal do
begin
sEncode := sEncode + arrMessage[iCol, iRow]
end;
end;
RichEdit1.Lines.add(sEncode);
end;
end.