November 23, 2008

Mengembalikan File Yang Disembunyikan Virus

Filed under: Orat Oret, Blogramming

Suatu saat flashdisk saya terkena virus. Semua file yang berekstensi *.doc hilang entah kemana. Hingga menimbulkan kedukaan yang mendalam di hati saya (bahasanya biasa aja dooong).

Singkat cerita, virus di flashdisk saya berhasil dibersihkan. Tetapi saya masih kehilangan file-file yang penting. Tapi mau bagaimana lagi? Rencananya roh-roh file yang hilang tersebut akan dihadirkan lagi menggunakan program file recovery, tapi belum sempat dilaksanakan. Masih kurang sesajen.

Surprise!! Saat flashdisk saya dibaca oleh komputer kawan, rupanya file2 tersebut terbaca. Hanya saja di-hidden. Berita gembira, rupanya file2 tersebut dibuat tidak tampak oleh virus. Padahal hampir saja saya menghubungi komisi orang hilang atau kontras.

Ketika file tersebut ingin saya pulihkan dari status hidden, saya klik kanan – properties, rupanya file tersebut ter-deep freeze hidden, dalam kata lain tidak bisa dipulihkan hiddennya. Waduh…Tampaknya file-file yang disembunyikan itu dibuat menjadi file system oleh virus.

Kemudian, saya setting computer saya agar bisa membaca file yang hidden, melalui tools\folder options\view di windows explorer. Tapi rupanya belum terbaca juga. Saya un-check ‘Hide protected operating system files’, tetap tidak terbaca. Keanehan terjadi, rupanya setelah saya klik tombol OK, item tersebut kembali checked. Entah kenapa. Jangan-jangan, computer saya masih ada virusnya????

Akhirnya saya pakai cara bodoh (sebenarnya, karena saya merasa bodoh, maka cara apa pun yang saya lakukan tetap namanya cara bodoh. Huh… menghina diri sendiri). Saya pinjam komputer kawan saya itu, lalu saya buka file yang hidden. Kemudian saya save-as dengan nama yang lain (file yang terbaru tidak hidden). Lalu file yang hidden itu saya delete.

Capek juga. Ada lumayan file bertipe doc di flashdisk saya. Hhhh….

Akhirnya saya tanya teman, bagaimana caranya agar file yang ghaib itu bisa pulih. O la la, rupanya dia tahu. Caranya seperti ini:

1.Buka command prompt.
2.Tuju folder yang memuat file yang mati suri.
3.Lalu ketikkan attrib –s –h *
4.Berhasil.

Wah… saya baru tahu caranya. Mungkin pembaca sudah dulu tahu ya. Ya… begini lah saya. Kampungan. Wekekekeke……..

May 6, 2008

Bermain Dengan ADO.Net(5)

Filed under: Blogramming

Manipulasi Data - 2

Sebenarnya ada cara yang mudah untuk memanipulasi data. Kelewatan nih… Caranya dengan langsung menginput pada datagridview.

Tampilannya akan seperti ini.

”Selengkapnya..>>”

April 28, 2008

Bermain Dengan ADO.Net (4)

Filed under: Blogramming

Manipulasi Data

Bahasan selanjutnya adalah bagaimana kita melakukan insert/update data ke dalam database. Kita masih menggunakan database yang sama, serta melanjutkan form yang sama.

Berikut ini tampilan form selanjutnya.

”Selengkapnya..>>”

March 19, 2008

Bermain dengan Ado.Net (3)

Filed under: Blogramming

Menampilkan Data Pada DatagridView dan Per Record.

Kita sudah membahas bagaimana cara menampilkan data pada DatagridView, juga menampilkan data per record.

Metode menampilkan data per record memiliki kelemahan yaitu tidak bisa melihat banyak data sekaligus. Sungguh tidak enak bila harus menggerak-gerakkan record, sedangkan datanya ada ribuan record.

Tapi bila ditampilkan pada grid pun bukan berarti tidak memiliki kelemahan. Kelemahannya adalah keterbatasan ruang, keterbatasan lebar layar atau jendela atau form. Bayangkan bila kita hendak menampilkan lebih dari 10 field/kolom dalam satu datagrid, apakah kolom-kolom tersebut bisa ditampilkan sekaligus?

”Selengkapnya..>>”

February 5, 2008

Bermain dengan ADO.Net (2)

Filed under: Blogramming

Scrolling Data

Sebelumnya, kita sudah mempelajari cara me-load data kedalam DataGridView. Kali ini, kita akan melakukan scrolling data.

Maksudnya seperti ini, ada kalanya data ditampilkan per record, bukan pada datagrid. Sehingga kita tidak bisa melihat data secara jamak, tapi disuguhkan per record. Lihat gambar.

Photobucket

Karena ditampilkan per record, maka untuk melihat record yang lain perlu dilakukan perpindahan record. Untuk pindah record digunakan tombol next/previous. Lalu ada juga tombol first & last untuk pindah ke record pertama atau record terakhir.

Photobucket

Keterangan label pada tombol-tombol di atas adalah:

|<  = Ke awal record. Untuk tombolnya, beri nama btnFirst
<  = Menuju record sebelumnya, btnPrev.
> = Menuju record selanjutnya, btnNext.
>| = Menuju record terakhir, btnLast.

Masih menggunakan database sebelumnya, dan table yang sama (tbMataUang) yang hanya terdiri dari 2 field: Kode dan Nama.

Untuk Textbox yang menampilkan kode, beri nama txtKode. Dan untuk Nama, beri nama txtNama.

Listingnya seperti ini:

Imports System.Data.OleDb

Public Class FormScrollData
    Private oleDa As New OleDbDataAdapter("Select * from tbMataUang", _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ Application.StartupPath.ToString & "\dbTutorial.mdb")
    Private dt As New DataTable

    Dim bm As BindingManagerBase

    Private Sub FormScrollData_Load(ByVal sender As _
System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        oleDa.Fill(dt)

        bm = BindingContext(dt)

        txtKode.DataBindings.Add("text", dt, "Kode")
        txtNama.DataBindings.Add("text", dt, "Nama")
    End Sub

    Private Sub btnFirst_Click(ByVal sender As System.Object, ByVal _
e As System.EventArgs) Handles btnFirst.Click
        bm.Position = 0
    End Sub

    Private Sub btnPrev_Click(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles btnPrev.Click
        bm.Position -= 1
    End Sub

    Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles btnNext.Click
        bm.Position += 1
    End Sub

    Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles btnLast.Click
        bm.Position = bm.Count
    End Sub
End Class

Ada beberapa syntax yang saya tidak perlu menjelaskannya lagi, karena pada bagian pertama sudah dijelaskan. Bagian kali ini, saya memperkenalkan konsep data binding.

Data binding memudahkan kita berinteraksi dengan data source. Di bagian ini diperkenalkan bagaimana memanfaatkan data binding untuk melakukan scrolling data.

Bind dalam bahasa inggris artinya mengikat/membalut. Anggap seperti itulah, ada datasource (sumber data) yang dikaitkan ke objek-objek yang kita buat. Datasourcenya adalah objek dt yang telah diisi dengan data-data yang ada pada table tbMataUang. Yang diikat adalah antara field yang ada pada datasource, dengan property pada objek.

Syntax

txtKode.DataBindings.Add("text", dt, "Kode")

bisa diterjemahkan seperti ini, property text pada txtKode dihubungkan dengan field kode yang ada dalam dt. Begitu juga dengan txtNama.

BindingManagerBase (pada code di atas menggunakan variable bm) mengatur semua objek-objek yang terikat pada datasource yang sama. Untuk mengisi bm, kita gunakan BindingContext, dan kita isi datasourcenya dengan dt.

bm = BindingContext(dt)

Kita menggunakan bm ini buat memindahkan record, atau menuju record pertama/terakhir.

bm.Position += 1
bm.Position -= 1
bm.Position = 0

Untuk ke record selanjutnya, posisi bm ditambah 1, begitu sebaliknya buat menuju ke record sebelumnya. Untuk menuju record pertama, posisi bm diisi dengan nilai 0. Dan untuk menuju record terakhir, kita tuliskan code

bm.Position = bm.Count

yang artinya mengisi nilai posisi bm dengan nilai besar jumlah record yang terikat di bm tersebut.

Tiap kali posisi bm berubah, tiap objek yang terikat dengan datasource yang sama akan merefresh nilainya dan mengisi nilai baru sesuai dengan posisi bm.

Saya kira cukup. Mudah2an bisa dimengerti.

January 7, 2008

Encrypt-Decrypt String (2)

Filed under: Blogramming

Yang ini dari temanku, Dandi. Memakai Class bawaan .Net yang menggunakan metode Rinjdael. Memakai bahasa C#.

using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;
using System.Collections;

public class AES_Cryptography
{
    public const int KEYSIZE_128 = 128;
    public const int KEYSIZE_192 = 192;
    public const int KEYSIZE_256 = 256;

    public const string HASH_MD5 = "MD5";
    public const string HASH_SHA1 = "SHA1";

    private string getRandomPassword()
    {
        string strOut = "";
        Random rnd = new Random();
        for (int i = 0; i < 8; i++)
            strOut = strOut + Convert.ToChar(rnd.Next(0, 254)).ToString();
        MD5 md5 = new MD5CryptoServiceProvider();
        byte[] strTemp = md5.ComputeHash(Encoding.UTF8.GetBytes(strOut));
        string sOut = "";
        foreach (byte b in strTemp)
        {
            sOut += String.Format("{0:x2}", b);
        }
        sOut = sOut.Substring(8, 16);
        return sOut;
    }

    private string getRandomSalt()
    {
        string strOut = "";
        Random rnd = new Random();
        for (int i = 0; i < 8; i++)
            strOut = strOut + Convert.ToChar(rnd.Next(0, 254)).ToString();
        MD5 md5 = new MD5CryptoServiceProvider();
        byte[] strTemp = md5.ComputeHash(Encoding.UTF8.GetBytes(strOut));
        string sOut = "";
        foreach (byte b in strTemp)
        {
            sOut += String.Format("{0:x2}", b);
        }
        sOut = sOut.Substring(8, 16);
        return sOut;
    }

    private string getRandomInitVector()
    {
        string strOut = "";
        Random rnd = new Random();
        for (int i = 0; i < 8; i++)
            strOut = strOut + Convert.ToChar(rnd.Next(0, 254)).ToString();
        MD5 md5 = new MD5CryptoServiceProvider();
        byte[] strTemp = md5.ComputeHash(Encoding.UTF8.GetBytes(strOut));
        string sOut = "";
        foreach (byte b in strTemp)
        {
            sOut += String.Format("{0:x2}", b);
        }
        sOut = sOut.Substring(8, 16);
        return sOut;
    }

    public string encryptString(string clearText)
    {
        try
        {
            string cipherText = "";
            string strPass = getRandomPassword();
            string strSalt = getRandomSalt();
            string strIV = getRandomInitVector();

            string cipherOut;
            MemoryStream mStream = new MemoryStream();
            Rijndael rCrypt = Rijndael.Create();

            PasswordDeriveBytes password = new PasswordDeriveBytes(strPass, Encoding.ASCII.GetBytes(strSalt), AES_Cryptography.HASH_MD5, 9);

            rCrypt.Key = password.GetBytes(AES_Cryptography.KEYSIZE_256 / 8 ) ;
            rCrypt.IV = Encoding.ASCII.GetBytes(strIV);

            CryptoStream cStream = new CryptoStream(mStream, rCrypt.CreateEncryptor(rCrypt.Key, rCrypt.IV), CryptoStreamMode.Write);
            cStream.Write(Encoding.UTF8.GetBytes(clearText), 0, Encoding.UTF8.GetBytes(clearText).Length);
            cStream.FlushFinalBlock();

            cipherText = Convert.ToBase64String(mStream.ToArray());

            cStream.Close();
            mStream.Close();

            cipherText = strPass.Substring( 0 , 8 ) + strIV + cipherText + strSalt + strPass.Substring(8, 8 ) ;

            cipherOut = cipherText;
            return cipherOut;
        }
        catch (Exception exp)
        {
            throw new Exception(exp.Message, exp);
        }
    }

    public string decryptString(string cipherText)
    {
        try
        {
            MemoryStream mStream = new MemoryStream();
            Rijndael rCrypt = Rijndael.Create();
            string textOut;

            string strOut = "";
            string strPass = cipherText.Substring(0, 8 ) + cipherText.Substring(cipherText.Length - 8, 8 ) ;
            string strSaltValue = cipherText.Substring(cipherText.Length - (8 + 16), 16);
            string strIV = cipherText.Substring(8, 16);

            cipherText = cipherText.Substring(24, cipherText.Length - 16 - 16 - 16);

            PasswordDeriveBytes password = new PasswordDeriveBytes(strPass, Encoding.ASCII.GetBytes(strSaltValue), AES_Cryptography.HASH_MD5, 9);

            rCrypt.Key = password.GetBytes(AES_Cryptography.KEYSIZE_256 / 8 ) ;
            rCrypt.IV = Encoding.ASCII.GetBytes(strIV);

            CryptoStream cStream = new CryptoStream(mStream, rCrypt.CreateDecryptor(rCrypt.Key, rCrypt.IV), CryptoStreamMode.Write);
            cStream.Write(Convert.FromBase64String(cipherText), 0, Convert.FromBase64String(cipherText).Length);
            cStream.FlushFinalBlock();

            strOut = Encoding.UTF8.GetString(mStream.ToArray());

            cStream.Close();
            mStream.Close();

            textOut = strOut;
            return textOut;
        }
        catch (Exception exp)
        {
            throw new Exception(exp.Message, exp);
        }
    }

    public string encryptString(string clearText, string passKey)
    {
        try
        {
            string cipherText = "";
            string strPass = passKey;
            string strSalt = getRandomSalt();
            string strIV = getRandomInitVector();

            string cipherOut;
            MemoryStream mStream = new MemoryStream();
            Rijndael rCrypt = Rijndael.Create();

            PasswordDeriveBytes password = new PasswordDeriveBytes(strPass, Encoding.ASCII.GetBytes(strSalt), AES_Cryptography.HASH_MD5, 9);

            rCrypt.Key = password.GetBytes(AES_Cryptography.KEYSIZE_256 / 8 ) ;
            rCrypt.IV = Encoding.ASCII.GetBytes(strIV);

            CryptoStream cStream = new CryptoStream(mStream, rCrypt.CreateEncryptor(rCrypt.Key, rCrypt.IV), CryptoStreamMode.Write);
            cStream.Write(Encoding.UTF8.GetBytes(clearText), 0, Encoding.UTF8.GetBytes(clearText).Length);
            cStream.FlushFinalBlock();

            cipherText = Convert.ToBase64String(mStream.ToArray());

            cStream.Close();
            mStream.Close();

            cipherText = strIV + cipherText + strSalt;

            cipherOut = cipherText;
            return cipherOut;
        }
        catch (Exception exp)
        {
            throw new Exception(exp.Message, exp);
        }
    }

    public string decryptString(string cipherText, string passKey)
    {
        try
        {
            MemoryStream mStream = new MemoryStream();
            Rijndael rCrypt = Rijndael.Create();
            string textOut;

            string strOut = "";
            string strPass = passKey;
            string strSaltValue = cipherText.Substring(cipherText.Length - (16), 16);
            string strIV = cipherText.Substring(0, 16);

            cipherText = cipherText.Substring(16, cipherText.Length - 16 - 16);

            PasswordDeriveBytes password = new PasswordDeriveBytes(strPass, Encoding.ASCII.GetBytes(strSaltValue), AES_Cryptography.HASH_MD5, 9);

            rCrypt.Key = password.GetBytes(AES_Cryptography.KEYSIZE_256 / 8 ) ;
            rCrypt.IV = Encoding.ASCII.GetBytes(strIV);

            CryptoStream cStream = new CryptoStream(mStream, rCrypt.CreateDecryptor(rCrypt.Key, rCrypt.IV), CryptoStreamMode.Write);
            cStream.Write(Convert.FromBase64String(cipherText), 0, Convert.FromBase64String(cipherText).Length);
            cStream.FlushFinalBlock();

            strOut = Encoding.UTF8.GetString(mStream.ToArray());

            cStream.Close();
            mStream.Close();

            textOut = strOut;
            return textOut;
        }
        catch (Exception exp)
        {
            throw new Exception(exp.Message, exp);
        }
    }
}

Encrypt-Decrypt String (1)

Filed under: Blogramming

Class berikut ini berfungsi untuk meng-encrypt-decrypt string. Misalnya untuk keperluan meng-enkripsi password, dll. Masih menggunakan vb.Net 2005. Menggunakan class yang menggunakan metode TripleDes.

Imports System.IO
Imports System.Security.Cryptography
Imports System.Text

Public Class zSecurity
    Dim password As String = "ZE161207"
    Dim salt() As Byte = {&H0, &H1, &H2, &H3, &H4, &H5, &H6, &HF1, &HF0, &HEE, &H21, &H22, &H45}

    Public Function EncryptString(ByVal str As String) As String
        Dim k1 As New Rfc2898DeriveBytes(password, salt, 1000)
        Dim encAlg As TripleDES = TripleDES.Create()
        encAlg.Key = k1.GetBytes(16)

        Dim encryptionStream As New MemoryStream()
        Dim encrypt As New CryptoStream(encryptionStream, encAlg.CreateEncryptor(), CryptoStreamMode.Write)
        Dim utfD1 As Byte() = New System.Text.UTF8Encoding(False).GetBytes(str)
        encrypt.Write(utfD1, 0, utfD1.Length)
        encrypt.FlushFinalBlock()
        encrypt.Close()
        Dim edata1 As Byte() = encryptionStream.ToArray()
        k1.Reset()

        Return Convert.ToBase64String(edata1) & Convert.ToBase64String(encAlg.IV) ‘Encoding.ASCII.GetString(encAlg.IV)
    End Function

    Public Function DecryptString(ByVal str As String) As String
        Dim k2 As New Rfc2898DeriveBytes(password, salt)

        Dim strIV As String = str.Substring(str.Length - 12, 12)
        str = str.Substring(0, str.Length - 12)

        Dim decAlg As TripleDES = TripleDES.Create()
        decAlg.Key = k2.GetBytes(16)
        decAlg.IV = Convert.FromBase64String(strIV)
        Dim decryptionStreamBacking As New MemoryStream()
        Dim decrypt As New CryptoStream(decryptionStreamBacking, decAlg.CreateDecryptor(), CryptoStreamMode.Write)
        decrypt.Write(Convert.FromBase64String(str), 0, Convert.FromBase64String(str).Length)
        decrypt.Flush()
        decrypt.Close()
        k2.Reset()
        Return New UTF8Encoding(False).GetString(decryptionStreamBacking.ToArray())
    End Function
End Class

January 4, 2008

Mapping Drive

Filed under: Blogramming

Class di bawah ini untuk melakukan mapping drive ke komputer lain. Dapet dari suatu sumber, terus dimodifikasi. Menggunakan vb.Net, versi 2005.

Public Class Mapping_Drive
    Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (ByRef lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Integer) As Integer

    Public Declare Function WNetCancelConnection2 Lib "mpr" Alias "WNetCancelConnection2A" _
(ByVal lpName As String, ByVal dwFlags As Integer, ByVal fForce As Integer) As Integer

    <Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential)> _
    Public Structure NETRESOURCE
        Public dwScope As Integer
        Public dwType As Integer
        Public dwDisplayType As Integer
        Public dwUsage As Integer
        Public lpLocalName As String
        Public lpRemoteName As String
        Public lpComment As String
        Public lpProvider As String
    End Structure

    Public Const ForceDisconnect As Integer = 1
    Public Const RESOURCETYPE_DISK As Long = &H1

    Public Function MapDrive(ByVal DriveLetter As String, ByVal UNCPath As String, ByVal strUsername As String, ByVal strPassword As String) As Boolean

        Dim nr As NETRESOURCE

        nr = New NETRESOURCE
        nr.lpRemoteName = UNCPath
        nr.lpLocalName = DriveLetter & ":"
        nr.dwType = RESOURCETYPE_DISK

        Dim result As Integer
        result = WNetAddConnection2(nr, strPassword, strUsername, 0)

        If result = 0 Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function MapDrive(ByVal DriveLetter As String, ByVal UNCPath As String) As Boolean

        Dim nr As NETRESOURCE
        Dim strUsername As String
        Dim strPassword As String

        nr = New NETRESOURCE
        nr.lpRemoteName = UNCPath
        nr.lpLocalName = DriveLetter & ":"
        strUsername = Nothing ‘(add parameters to pass this if necessary)
        strPassword = Nothing ‘(add parameters to pass this if necessary)
        nr.dwType = RESOURCETYPE_DISK

        Dim result As Integer
        result = WNetAddConnection2(nr, strPassword, strUsername, 0)

        If result = 0 Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function UnMapDrive(ByVal DriveLetter As String) As Boolean
        Dim rc As Integer
        rc = WNetCancelConnection2(DriveLetter & ":", 0, ForceDisconnect)

        If rc = 0 Then
            Return True
        Else
            Return False
        End If

    End Function
End Class

December 4, 2007

Bermain Dengan Ado.Net (1)

Filed under: Blogramming

MENAMPILKAN DATA PADA DATAGRID

Sebagai permulaan, kita mencoba menampilkan data yang ada pada database ke sebuah datagrid. Control Datagrid, yang pada VB.Net versi 2005 bernama DataGridView, berfungsi untuk menampilkan data kedalam bentuk table yang terdiri dari baris dan kolom. Komponen ini sangat representatif untuk menampilkan data karena sesuai dengan karakteristik penyimpanan data pada table di database, yang terdiri dari field dan record.

Bentuknya seperti yang tampak pada di bawah ini:

”Selengkapnya..>>”

December 3, 2007

Mendapatkan Koneksi String

Filed under: Blogramming

Saat harus melakukan koneksi database, kita membutuhkan koneksi string. Tiap database berbeda koneksi stringnya. Bagaimana caranya agar kita bisa menuliskan koneksi string dengan tepat?

MENGHAFAL!

Tenang… itu cuma salah satu cara kok. Anda tidak suka menghafal? Sama!!!
”Selengkapnya..>>”

October 24, 2007

KONEKSI STRING

Filed under: Blogramming

Koneksi String adalah sebuah string yang berisi informasi server database, nama database, dan informasi lainnya.

Koneksi string ini dipakai oleh objek yang akan menghubungkan program dengan database. Setelah terkoneksi, baru bisa dilakukan pengambilan data, modifikasi data, dll.

Macam-macam bentuk koneksi string bisa dilihat di http://www.connectionstrings.com/.