ปัจจุบันหน้าเว็บจำนวนมากใช้รูปภาพแบบสุ่มเมื่อเข้าสู่ระบบ ซึ่งเป็นวิธีที่ง่ายและมีประสิทธิภาพในการป้องกันการโจมตีที่เป็นอันตรายจากแฮกเกอร์ วันนี้ฉันอ่านข้อมูลบางอย่างบนอินเทอร์เน็ตและเข้าใจหลักการสร้าง: รับสตริงสุ่มจากตัวอย่าง บันทึกสตริงสุ่มลงในเซสชัน และสร้างรูปภาพโค้ดสุ่มในรูปแบบของบิตแมป
ทำให้สำเร็จ:
เพิ่มเนมสเปซ
โดยใช้ System. Drawing;
โดยใช้ระบบ.การวาดภาพ.ภาพ;
โดยใช้ระบบ. Drawing. Drawing2D;
สร้างโค้ดหน้า
โดยใช้ระบบ
ใช้ System.Data;
โดยใช้ระบบการกำหนดค่า;
ใช้ System.Collections;
ใช้ System.Web;
โดยใช้ System.Web.Security;
โดยใช้ System.Web.UI;
ใช้ System.Web.UI.WebControls;
ใช้ System.Web.UI.WebControls.WebParts;
ใช้ System.Web.UI.HtmlControls;
โดยใช้ระบบการวาดภาพ;
โดยใช้ระบบ.การวาดภาพ.ภาพ;
ใช้ System. Drawing. Drawing2D
คลาสสาธารณะบางส่วน getRandImg : System.Web.UI.Page
-
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
-
//สร้างรูปภาพโค้ดแบบสุ่ม
SetValidateCode();
//เพจที่สร้างขึ้นไม่ได้ถูกบันทึกลงในแคช
Response.Cache.SetNoStore();
}
//ตั้งรหัสยืนยัน
โมฆะส่วนตัว SetValidateCode()
-
//สร้างบิตแมปใหม่
บิตแมป newBitmap = บิตแมปใหม่ (
71,
ยี่สิบสาม
PixelFormat.Format32bppArgb
-
// รับหน้าจอการวาดภาพจากบิตแมป
กราฟิก g = Graphics.FromImage (newBitmap);
//เครื่องกำเนิดตัวเลขสุ่ม
สุ่ม r = สุ่มใหม่ ();
//ล้างหน้าจอการวาด
g.Clear (สี ขาว);
//การรบกวนเส้นหน้าจอการวาด
สำหรับ (int i = 0; i < 50; i++)
-
int x1 = r.ถัดไป (newBitmap.Width);
int x2 = r.ถัดไป (newBitmap.Width);
int y1 = r.Next (newBitmap.Height);
int y2 = r.ถัดไป (newBitmap.Height);
g.DrawLine(ปากกาใหม่(
Color.FromArgb(r.Next())),
x1,
y1,
x2,
ย2
-
-
// การรบกวนจุดหน้าจอการวาด
สำหรับ (int i = 0; i < 100; i++)
-
int x = r.ถัดไป (newBitmap.Width);
int y = r.Next (newBitmap.Height);
ใหม่Bitmap.SetPixel(
เอ็กซ์,
ใช่
Color.FromArgb(r.Next())
-
-
//รับสตริงสุ่ม (ความยาว 5 หลัก)
ค่าสตริง = GenerateRandom (5);
//กำหนดสตริงสุ่มให้กับเซสชัน
เซสชัน ["RandCode"] = ค่า;
//กำหนดรูปแบบตัวอักษรสำหรับแสดงรูปภาพ
แบบอักษร แบบอักษร = แบบอักษรใหม่ (
"อาเรียล"
14,
FontStyle.ตัวหนา
-
สุ่ม rr = สุ่มใหม่ ();
int yy = rr.ถัดไป(1, 4);
//กำหนดสตริงสุ่มเพื่อแสดงแปรงรูปภาพ
แปรง LinearGradientBrush = LinearGradientBrush ใหม่ (
สี่เหลี่ยมผืนผ้าใหม่ (0, 0, 71, 23),
สี.แดง,
สี.สีฟ้า,
1.2f,
จริง
-
g.DrawString(ค่า, ฟอนต์, แปรง, 2, yy);
g.DrawRectangle(ปากกาใหม่(
สีเงิน),
0,
0,
70,
ยี่สิบสอง
-
System.IO.MemoryStream ms = System.IO.MemoryStream ใหม่ ();
newBitmap.Save(ms, ImageFormat.Gif);
//ภาพที่ออกมา
Response.ClearContent();
Response.ContentType = "รูปภาพ/gif";
Response.BinaryWrite(ms.ToArray());
}
//ชุดค่าคงที่
ถ่านคงที่ส่วนตัว [] คงที่ ={
'0','1','2','3','4','5','6','7','8','9',
'เป็น', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'ฉัน', 'j',
'k','l','m','n','o','p','q','r','s','t',
'คุณ', 'v', 'w', 'x', 'y', 'z'
-
//สร้างสตริงแบบสุ่ม
สตริงคงที่สาธารณะ GenerateRandom (ความยาว int)
-
System.Text.StringBuilder newRandom = System.Text.StringBuilder ใหม่ (36);
สุ่ม rd = สุ่มใหม่ ();
สำหรับ (int i = 0; i <ความยาว; i++)
-
newRandom.Append(ค่าคงที่[rd.Next(36)]);
-
กลับ newRandom.ToString();
-
}
สำหรับเพจที่ใช้รูปภาพแบบสุ่ม ตัวควบคุม IMAGE จะถูกเขียนดังนี้:
<asp:Image ID="Image1" ImageUrl="~/getRandImg.aspx" runat="server" />
โค้ดตัวอย่าง: http://www.cnblogs .com /heekui/archive/2007/01/06/613609.html