Encryption/Decryption

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
RamazanG
Üye
Mesajlar: 73
Kayıt: 16 Tem 2010 03:38

Encryption/Decryption

Mesaj gönderen RamazanG »

Makale: Internetten Bulmuştum Kimin Hatırlamıyorum.
Ç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:

Resim

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.
2) Metni İki Dizi boyutuyla Encryption Etmek

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ç:

Resim

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.
Cevapla