<body><iframe src="http://www.blogger.com/navbar.g?targetBlogID=20019988&amp;blogName=Budi%27s+Blog&amp;publishMode=PUBLISH_MODE_BLOGSPOT&amp;navbarType=BLUE&amp;layoutType=CLASSIC&amp;homepageUrl=http%3A%2F%2Fmbraharjo.blogspot.com%2F&amp;searchRoot=http%3A%2F%2Fmbraharjo.blogspot.com%2Fsearch" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" height="30px" width="100%" id="navbar-iframe" title="Blogger Navigation and Search"></iframe> <div id="space-for-ie"></div>

Budi's Blog

Pernak-pernik seputar pemrograman, internet, blog, bisnis, dan trend saat ini.

Encrypt dan Decrypt String di Delphi

Proses penyandian terhadap string adalah masalah yang kerap kali kita butuhkan dalam suatu aplikasi, terutama untuk menyimpan data-data yang bersifat rahasia. Selain itu, kita juga perlu untuk dapat mengembalikan teks yang telah disandikan tersebut ke keadaan semula. Banyak cara yang dilakukan oleh para programer Delphi untuk menangani permasalahan-permasalahan semacam ini, salah satunya adalah dengan menggunakan unit yang ditulis oleh Steve Schafer berikut ini.

unit uEncrypt;

interface

function Decrypt(const S: AnsiString; Key: Word): AnsiString;
function Encrypt(const S: AnsiString; Key: Word): AnsiString;

implementation

const
C1 = 52845;
C2 = 22719;

function Decode(const S: AnsiString): AnsiString;
const
Map: array[Char] of Byte = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 52, 53,
54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30,
31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0);
var
I: LongInt;
begin
case Length(S) of
2:
begin
I := Map[S[1]] + (Map[S[2]] shl 6);
SetLength(Result, 1);
Move(I, Result[1], Length(Result))
end;
3:
begin
I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12);
SetLength(Result, 2);
Move(I, Result[1], Length(Result))
end;
4:
begin
I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12) +
(Map[S[4]] shl 18);
SetLength(Result, 3);
Move(I, Result[1], Length(Result))
end
end
end;

function PreProcess(const S: AnsiString): AnsiString;
var
SS: AnsiString;
begin
SS := S;
Result := ‘’;
while SS <> ‘’ do
begin
Result := Result + Decode(Copy(SS, 1, 4));
Delete(SS, 1, 4)
end
end;

function InternalDecrypt(const S: AnsiString; Key: Word): AnsiString;
var
I: Word;
Seed: Word;
begin
Result := S;
Seed := Key;
for I := 1 to Length(Result) do
begin
Result[I] := Char(Byte(Result[I]) xor (Seed shr 8));
Seed := (Byte(S[I]) + Seed) * Word(C1) + Word(C2)
end
end;

function Decrypt(const S: AnsiString; Key: Word): AnsiString;
begin
Result := InternalDecrypt(PreProcess(S), Key)
end;

function Encode(const S: AnsiString): AnsiString;
const
Map: array[0..63] of Char = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’ +
‘abcdefghijklmnopqrstuvwxyz0123456789+/’;
var
I: LongInt;
begin
I := 0;
Move(S[1], I, Length(S));
case Length(S) of
1:
Result := Map[I mod 64] + Map[(I shr 6) mod 64];
2:
Result := Map[I mod 64] + Map[(I shr 6) mod 64] +
Map[(I shr 12) mod 64];
3:
Result := Map[I mod 64] + Map[(I shr 6) mod 64] +
Map[(I shr 12) mod 64] + Map[(I shr 18) mod 64]
end
end;

function PostProcess(const S: AnsiString): AnsiString;
var
SS: AnsiString;
begin
SS := S;
Result := ‘’;
while SS <> ‘’ do
begin
Result := Result + Encode(Copy(SS, 1, 3));
Delete(SS, 1, 3)
end
end;

function InternalEncrypt(const S: AnsiString;
Key: Word): AnsiString;
var
I: Word;
Seed: Word;
begin
Result := S;
Seed := Key;
for I := 1 to Length(Result) do
begin
Result[I] := Char(Byte(Result[I]) xor (Seed shr 8));
Seed := (Byte(Result[I]) + Seed) * Word(C1) + Word(C2)
end
end;

function Encrypt(const S: AnsiString; Key: Word): AnsiString;
begin
Result := PostProcess(InternalEncrypt(S, Key))
end;

end.

Contoh penggunaan:

procedure TForm1.Button1Click(Sender: TObject);
const
key = 33189;
var
kode: string;
begin
kode := Encrypt(Memo1.Text, key);
Memo2.Text := kode;
end;

procedure TForm1.Button2Click(Sender: TObject);
const
key = 33189;
var
str: string;
begin
str := Decrypt(Memo2.Text, key);
Memo3.Text := str;
end;

Labels:

Dikirim oleh Budi Raharjo @ 10:33 AM, ,

Mengirim SMS dengan MIDletPascal

MIDletPascal dilengkapi tiga buah fungsi yang digunakan untuk proses pengiriman SMS, yaitu SmsStartSend, SmsIsSending, dan SmsWasSucessfull. Ketiga fungsi tersebut memiliki bentuk deklarasi seperti berikut:

function SmsStartSend(destination: string;
message:string): boolean;
function SmsIsSending: boolean;
function SmsWasSuccessfull: boolean;

Fungsi SmsStartSend digunakan untuk mengirim SMS. Parameter destination menunjukkan nomor HP yang dijadikan tujuan pengiriman, sedangkan message adalah teks yang akan dikirimkan. Parameter destination harus ditulis dalam format ‘sms://’. Nilai yang akan dikembalikan adalah true apabila SMS telah terkirim ke SMS Centre (SMSC), dan false apabila sebaliknya.

Fungsi SmsIsSending digunakan untuk memeriksa apakah SMSC sedang sibuk untuk mengirimkan SMS atau tidak. Apabila ya, maka fungsi ini akan mengembalikan nilai true, dan false apabila sebaliknya.

Fungsi SmsWasSuccessfull digunakan untuk mengetahui apakah SMS telah terkirim ke nomor tujuan atau belum. Apabila ya, maka fungsi ini akan mengembalikan nilai true, dan false apabila sebaliknya.

Berikut ini contoh program yang menunjukkan hal tersebut.

// Send SMS using MIDletPascal - by Budi Raharjo

program SMSMIDlet;

var
IDNoHP: integer;
cmdExit, cmdNext, cmdSend, clicked1, clicked2: command;
phoneNum, msg: string;

procedure ShowMainForm;
begin
ClearForm;
SetFormTitle('Mengirim SMS');

IDNoHP := FormAddTextField('No. HP Tujuan:', '',
20, TF_PHONENUMBER);
ShowForm;

AddCommand(cmdExit);
AddCommand(cmdNext);
end;

procedure SendSMS(destination, message: string);
begin
if not SmsStartSend(destination, message) then Halt;

while SmsIsSending do begin
Delay(100);
end;

if not SmsWasSuccessfull then Halt;
end;

begin
// membuat objek Command
cmdExit := CreateCommand('Keluar', CM_EXIT, 1);
cmdNext := CreateCommand('Lanjut', CM_OK, 2);
cmdSend := CreateCommand('Kirim', CM_OK, 1);

ShowMainForm;

repeat
clicked1 := GetClickedCommand;
if clicked1 = cmdNext then begin
// mendapatkan nomor HP
phoneNum := FormGetText(IDNoHP);
// membuka layar TextBox
ShowTextBox('Isi Pesan', '', 100, TF_ANY);
AddCommand(cmdSend);
repeat
clicked2 := GetClickedCommand;
until clicked2 <> EmptyCommand;
if clicked2 = cmdSend then begin
SendSMS('sms://' + phoneNum, GetTextBoxString);
ShowMainForm;
end;
end;
until clicked1 = cmdExit;

if clicked1 = cmdExit then halt;
end.

Labels:

Dikirim oleh Budi Raharjo @ 9:41 AM, ,

Buku Best-Seller

Pemrograman C++:
Mudah & Cepat Menjadi MASTER C++

C++ merupakan bahasa pemrograman yang sangat populer dan telah banyak digunakan untuk mengembangkan perangkat lunak di berbagai bidang, seperti: telekomunikasi, embedded system, bisnis, dan hiburan. Buku ini mengemukakan semua fitur baru yang terdapat pada C++ standar tersebut seperti exeption handling, RTTI (Run-Time Type Identification), template dan lainnya tanpa meninggalkan elemen-elemen dasar yang terdapat pada C++ original. Buku ini ditujukan untuk siapa saja yang secara serius ingin mengalami pemrograman C++. Khususnya bagi anda yang menekuni pemrograman visual seperti Borland C++ Builder dan Visual C++, buku ini akan sangat membantu dalam menanamkan konsep dan pondasi C++ yang kuat.
Pesan sekarang juga

Mudah Belajar JAVA

Java merupakan bahasa pemrograman yang saat ini sedang "naik daun" dan banyak digunakan oleh para programmer dan software developer untuk mengembangkan berbagai tipe aplikasi, mulai dari aplikasi console, aplikasi desktop, applet (aplikasi yang berjalan di lingkungan web browser), sampai ke aplikasi-aplikasi yang berskala enterprise. Buku ini cocok untuk siapa saja yang berminat mempelajari dan mengimplementasikan semua konsep pemrograman Java secara mudah dan cepat. Semua materi dalam buku ini disuguhkan dalam “logat” tutorial dan langsung disertai dengan contoh program sehingga akan mudah untuk dipahami. Tujuan akhir dari buku ini adalah mengantarkan, menuntun, dan memandu Anda untuk menjadi seorang programmer Java.
Pesan sekarang juga

Sekilas tentang Blog ini

Blog ini telah saya buat sejak tahun 2005, tepatnya di bulan Desember. Bermula dari iseng dan ikut-ikutan, akhirnya saya menjadikan blog ini sebagai wadah dari tulisan-tulisan saya yang berkaitan dengan pemrograman, khususnya untuk kasus-kasus database. Namun, kali ini saya mencoba untuk menambahkan beberapa tema baru ke dalamnya, diantaranya tentang internet, blog, dan bisnis.

Daftar Tulisan

Buku-buku BI-Obses

Diperkuat Oleh

Powered by Blogger

-->

Arsip