Enkripsi dapat membantu melindungi data agar tidak dilihat dan diubah, dan dapat membantu menyediakan sarana komunikasi yang aman melalui saluran yang tidak aman. Misalnya, data dapat dienkripsi menggunakan algoritma enkripsi, dikirimkan dalam keadaan terenkripsi, dan kemudian didekripsi oleh penerima yang dituju. Jika pihak ketiga menyadap data terenkripsi, akan sulit untuk mendekripsi data tersebut.
Untuk mencapai tujuan ini, Anda membuat skema enkripsi menggunakan kombinasi algoritma dan konvensi, yang disebut primitif enkripsi. Termasuk enkripsi kunci privat (enkripsi simetris), enkripsi kunci publik (enkripsi asimetris), tanda tangan kriptografi, dan hash kriptografi.
Kami menggunakan enkripsi kunci publik (enkripsi asimetris) untuk mengimplementasikan algoritma kode registrasi.
Enkripsi kunci publik menggunakan kunci pribadi yang harus dirahasiakan dari pengguna yang tidak berwenang dan kunci publik yang dapat dipublikasikan kepada siapa pun. Baik kunci publik maupun kunci privat mempunyai hubungan matematis; data yang dienkripsi dengan kunci publik hanya dapat didekripsi dengan kunci privat, sedangkan data yang ditandatangani dengan kunci privat hanya dapat diverifikasi dengan kunci publik.
Untuk kode registrasi, kami menggunakan kunci pribadi untuk menandatangani string (nama pengguna), dan kemudian menggunakan kunci publik untuk memverifikasi tanda tangan (kode registrasi). Karena kunci publik hanya dapat digunakan untuk verifikasi, kami dapat mendistribusikan kunci publik dengan percaya diri; kunci privat digunakan untuk penandatanganan, sehingga kunci privat harus disimpan di tangan pengembang. Dengan cara ini, tujuan sertifikasi registrasi tercapai. Semua perangkat lunak yang saat ini didaftarkan menggunakan mode "nama pengguna, kode registrasi" harus menggunakan teknologi ini.
Pertama kita buat kunci publik dan kunci privat yang ingin kita gunakan.
Private rsa Sebagai Keamanan Baru.Kriptografi.RSACryptoServiceProvider
Kelas RSACryptoServiceProvider menyediakan implementasi algoritma RSA untuk melakukan enkripsi dan dekripsi asimetris. Kunci publik dan privat yang kita perlukan dapat dihasilkan melalui ToXMLString.
rsa.ToXmlString(False)
rsa.ToXmlString(True)
Jika parameternya False, hanya kunci publik yang akan dihasilkan; jika Benar, kunci publik dan kunci privat akan dihasilkan. Kami biasanya mendapatkan string kunci publik melalui ToXmlString(False); mendapatkan string kunci pribadi melalui ToXmlString(True) (walaupun berisi kunci publik). Kita dapat menyimpan kedua kunci ini di mesin lokal, mendefinisikan dan menggunakannya melalui konstanta string. Dengan kata lain, informasi pendaftaran kita akan menggunakan kunci publik dan privat yang unik.
Kami kemudian menandatangani string yang ditentukan dengan kunci publik dan pribadi.
rsa.FromXmlString(PRIVATE_KEY)
Redupkan f Sebagai Keamanan Baru.Kriptografi.RSAPKCS1SignatureFormatter(rsa)
f.SetHashAlgorithm("SHA1")
Redupkan source() Sebagai Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(UID)
Redupkan sha Sebagai Keamanan Baru .Cryptography.SHA1Managed
Dim result() As Byte = sha.ComputeHash(source)
Dim regkey() As Byte = f.CreateSignature(result)
SerialNumber = Convert.ToBase64String(regkey)
Inisialisasi ulang objek rsa dengan kunci pribadi yang baru saja diperoleh , lalu Signature dijalankan melalui kelas RSAPKCS1SignatureFormatter. Kami mengonversi string masukan menjadi array byte (nama pengguna default kami di sini hanya dapat terdiri dari karakter ASCII), dan menghitung nilai hashnya melalui algoritma hashing SHA1. Kemudian gunakan metode CreateSignature untuk menandatangani nilai hash yang diperoleh. Terakhir, kami mengubah array byte yang diperoleh menjadi string sebagai kode registrasi. Ini adalah proses menghasilkan kode registrasi. Kita dapat menggunakan kembali program ini untuk menandatangani nama pengguna yang berbeda untuk mendapatkan kode registrasi berbeda yang sesuai dengannya.
Terakhir, kami memverifikasi nama pengguna dan kode registrasi yang baru kami peroleh.
rsa.FromXmlString(PUBLIC_KEY)
Redupkan f Sebagai Keamanan Baru.Kriptografi.RSAPKCS1SignatureDeformatter(rsa)
f.SetHashAlgorithm("SHA1")
Redupkan kunci() Sebagai Byte = Convert.FromBase64String(SerialNumber)
Dim sha Sebagai Keamanan Baru.Kriptografi.SHA1Nama
Dim Terkelola () As Byte = sha.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(UID))
Result = f.VerifySignature(name, key)
Kali ini kita menggunakan kunci publik untuk menginisialisasi objek rsa, lalu memverifikasi tanda tangan melalui kelas RSAPKCS1SignatureDeformatter . Kami secara terbalik mengubah kode registrasi yang diperoleh menjadi array byte; dan melakukan perhitungan hash pada nama pengguna untuk mendapatkan nilai hash. Terakhir, verifikasi melalui VerifySignature.
Seperti dapat dilihat dari program di atas, kunci privat diperlukan untuk menghasilkan kode registrasi (kunci privat disertai dengan informasi kunci publik), dan sejumlah pasangan nama pengguna dan kode registrasi dapat dibuat. Dengan kunci publik, kami hanya dapat memverifikasi tetapi tidak dapat menghasilkan. Oleh karena itu, kunci publik dapat didistribusikan dengan aman ke semua pengguna untuk verifikasi, namun kunci privat tidak bisa. Oleh karena itu, kunci publik dan algoritma verifikasi dapat disertakan dalam versi rilis. Karena meskipun pengguna memperoleh kunci publik dan algoritma verifikasi, hal tersebut tidak dapat dibobol dengan mudah.
Mesin pendaftaran yang populer di Internet saat ini sebagian besar memecahkan kunci pribadi perangkat lunak, sehingga menghasilkan informasi pendaftaran yang diperlukan tanpa batas. Namun jika pengguna mendekompilasi produk Anda dan mengubah kode perantara, hal ini akan mengabaikan logika penilaian pendaftaran. Ini bukanlah masalah yang bisa diselesaikan dengan artikel ini. Karena meskipun Anda menggunakan teknologi Layanan Web untuk aktivasi atau registrasi online, Anda masih dapat menganalisis informasi server melalui mendengarkan jaringan dan mensimulasikan server palsu.
http://www.cnblogs.com/farrio/archive/2006/12/01/579296.html