Saat kami merancang modul login pengguna, kami sering menggunakan kode verifikasi, yang secara efektif dapat mencegah peretasan berbahaya oleh perangkat lunak peretas. Sekarang saya akan mengungkapkan kode sumber dari kode verifikasi yang biasa saya gunakan.
Cara menggunakan:
1. Tambahkan kelas ke proyek Web, seperti "CreateImage.cs", lalu salin kode sumber yang saya terbitkan ke dalamnya;
2. Buat formulir Web baru, misalnya "Image.aspx", dan tambahkan kode "CreateImage.DrawImage();" pada Page_Load. Tentu saja, jangan lupa untuk menambahkan referensi ke kelasnya! !
3. Tambahkan kode javascript berikut ke posisi yang sesuai di halaman (tempat Anda ingin meletakkan kode verifikasi) dan tidak apa-apa.
Kode sumbernya adalah sebagai berikut:
///
///Modul kode verifikasi ///
CreateImage kelas publik
{
DrawImage kekosongan statis publik()
{
CreateImage img=BuatImage baru();
HttpContext.Saat ini.Sesi["CheckCode"]=img.RndNum(4);
img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
}
///
/// Buat gambar verifikasi ///
/// Verifikasi karakter private void CreateImages(string checkCode)
{
int iwidth = (int)(checkCode.Panjang * 13);
Gambar Sistem.Gambar.Bitmap = Sistem.Gambar.Bitmap baru(iwidth, 23);
Grafik g = Grafik.FromImage(gambar);
g.Jelas(Warna.Putih);
//Mendefinisikan warna Warna[] c = {Warna.Hitam,Warna.Merah,Warna.Biru Tua,Warna.Hijau,Warna.Oranye,Warna.Brown,Warna.DarkCyan,Warna.Ungu};
//Definisikan string font[] font = {"Verdana","Microsoft Sans Serif","Comic Sans MS","Arial","宋体"};
Rand acak = acak baru();
//Mengeluarkan titik noise secara acak untuk(int i=0;i<50;i++)
{
int x = rand.Berikutnya(gambar.Lebar);
int y = rand.Berikutnya(gambar.Tinggi);
g.DrawRectangle(Pena baru(Warna.Abu-abu Muda, 0),x,y,1,1);
}
//Keluarkan karakter kode verifikasi dalam font dan warna berbeda untuk(int i=0;i
{
int cindex = rand.Berikutnya(7);
int findex = rand.Berikutnya(5);
Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
Kuas b = Sistem.Gambar.SolidBrush(c[cindex]);
ke dalam ii=4;
jika((i+1)%2==0)
{
ii=2;
}
g.DrawString(checkCode.Substring(i,1), f, b, 3+(i*12), ii);
}
//Gambar garis tepi g.DrawRectangle(Pena baru(Warna.Hitam,0),0,0,gambar.Lebar-1,gambar.Tinggi-1);
//Keluaran ke browser System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
HttpContext.Saat ini.Response.ClearContent();
//Respon.ClearContent();
HttpContext.Current.Response.ContentType = "gambar/Jpeg";
HttpContext.Saat ini.Respon.BinaryWrite(ms.ToArray());
g.Buang();
gambar.Buang();
}
///
/// Menghasilkan huruf acak ///
/// Jumlah huruf yang dihasilkan /// string
string pribadi RndNum(int VcodeNum)
{
string Vchar = "0,1,2,3,4,5,6,7,8,9";
string[] VcArray = Vchar.Split(',') ;
string VNum = "" ; // Karena string sangat pendek, StringBuilder tidak diperlukan int temp = -1 ; // Catat nilai acak terakhir dan cobalah untuk menghindari menghasilkan beberapa angka acak yang identik // Gunakan algoritma sederhana untuk memastikan Hasilkan nomor acak yang berbeda Random rand =new Random();
untuk ( int saya = 1 ; saya < VcodeNum+1 ; saya++ )
{
jika (suhu!= -1)
{
rand =new Random(i*temp*tidak dicentang((int)DateTime.Now.Ticks));
}
int t = rand.Berikutnya(VcArray.Panjang );
jika (suhu!= -1 && suhu == t)
{
kembalikan RndNum(VcodeNum);
}
suhu = t;
VNum += VcArray[t];
}
kembalikan VNum;
}