เมื่อเราออกแบบโมดูลการเข้าสู่ระบบของผู้ใช้ เรามักจะใช้รหัสยืนยัน ซึ่งสามารถป้องกันการแฮ็กซอฟต์แวร์ที่เป็นอันตรายได้อย่างมีประสิทธิภาพ ตอนนี้ฉันจะเปิดเผยซอร์สโค้ดของรหัสยืนยันที่ใช้โดยทั่วไปของฉัน
วิธีใช้:
1. เพิ่มคลาสในโครงการเว็บ เช่น "CreateImage.cs" จากนั้นคัดลอกซอร์สโค้ดที่ฉันเผยแพร่ลงไป
2. สร้างเว็บฟอร์มใหม่ เช่น "Image.aspx" และเพิ่มโค้ด "CreateImage.DrawImage ();" ลงใน Page_Load แน่นอนอย่าลืมเพิ่มการอ้างอิงไปยังคลาส! -
3. เพิ่มโค้ดจาวาสคริปต์ต่อไปนี้ในตำแหน่งที่เหมาะสมบนหน้าเว็บ (ตำแหน่งที่คุณต้องการใส่รหัสยืนยัน) เท่านี้ก็เรียบร้อย
ซอร์สโค้ดมีดังนี้:
-
/// โมดูลรหัสยืนยัน ///
CreateImage คลาสสาธารณะ
-
โมฆะสาธารณะคง DrawImage()
-
CreateImage img=ใหม่ CreateImage();
HttpContext.Current.Session["CheckCode"]=img.RndNum(4);
img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
-
-
/// สร้างภาพยืนยัน ///
/// ตรวจสอบอักขระโมฆะส่วนตัว CreateImages (สตริง checkCode)
-
int iwidth = (int)(checkCode.Length * 13);
รูปภาพ System. Drawing.Bitmap = System. Drawing.Bitmap ใหม่ (iwidth, 23);
กราฟิก g = Graphics.FromImage (รูปภาพ);
g.Clear (สี ขาว);
//กำหนดสี สี[] c = {Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple};
//กำหนดสตริงแบบอักษร[] font = {"Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体"};
สุ่มแรนด์ = สุ่มใหม่ ();
// จุดรบกวนเอาต์พุตแบบสุ่มสำหรับ (int i = 0; i <50; i ++)
-
int x = rand.Next (รูปภาพ. ความกว้าง);
int y = rand.Next (รูปภาพ. ความสูง);
g.DrawRectangle (ปากกาใหม่ (Color.LightGray, 0),x,y,1,1);
-
//ส่งออกอักขระรหัสยืนยันเป็นแบบอักษรและสีต่างๆ for(int i=0;i
-
int cindex = rand ถัดไป (7);
int findex = rand ถัดไป (5);
แบบอักษร f = System. Drawing.Font ใหม่ (แบบอักษร [findex], 10, System. Drawing.FontStyle.Bold);
แปรง b = ระบบใหม่ Drawing.SolidBrush (c [cindex]);
int ii=4;
ถ้า((i+1)%2==0)
-
ii=2;
-
g.DrawString(checkCode.Substring(i,1), f, b, 3+(i*12), ii);
-
//วาดเส้นขอบ g.DrawRectangle(ปากกาใหม่ (Color.Black,0),0,0,image.Width-1,image.Height-1);
//ส่งออกไปยังเบราว์เซอร์ System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms,System. Drawing.Imaging.ImageFormat.Jpeg);
HttpContext.Current.Response.ClearContent();
//Response.ClearContent();
HttpContext.Current.Response.ContentType = "รูปภาพ/Jpeg";
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
g.ทิ้ง();
รูปภาพ.ทิ้ง();
-
-
/// สร้างตัวอักษรสุ่ม ///
/// จำนวนตัวอักษรที่สร้างขึ้น /// สตริง
สตริงส่วนตัว RndNum (int VcodeNum)
-
สตริง Vchar = "0,1,2,3,4,5,6,7,8,9";
สตริง[] VcArray = Vchar.Split(',') ;
string VNum = "" ; // เนื่องจากสตริงสั้นมากจึงไม่จำเป็นต้องมี StringBuilder int temp = -1 ; // บันทึกค่าสุ่มสุดท้ายและพยายามหลีกเลี่ยงการสร้างตัวเลขสุ่มที่เหมือนกันหลายตัว // ใช้อัลกอริทึมง่ายๆ เพื่อให้แน่ใจว่าสร้าง ตัวเลขสุ่มที่แตกต่างกัน Random rand =new Random();
สำหรับ ( int i = 1 ; i < VcodeNum+1 ; i++ )
-
ถ้า (อุณหภูมิ != -1)
-
rand =สุ่มใหม่(i*temp*unchecked((int)DateTime.Now.Ticks));
-
int t = rand.Next (VcArray.Length );
ถ้า (อุณหภูมิ != -1 && อุณหภูมิ == t)
-
กลับ RndNum (VcodeNum);
-
อุณหภูมิ = เสื้อ;
VNum += VcArray[t];
-
กลับ VNum;
-