Banyak halaman web sekarang menggunakan gambar acak saat masuk, yang merupakan cara sederhana dan efektif untuk mencegah serangan berbahaya oleh peretas. Saya membaca beberapa informasi di Internet hari ini dan memahami prinsip pembuatan: mendapatkan string acak dari sampel, menyimpan string acak ke dalam sesi, dan membentuk gambar kode acak dalam bentuk bitmap.
menyelesaikan:
Tambahkan namespace
menggunakan System.Drawing;
menggunakan System.Drawing.Imaging;
menggunakan System.Drawing.Drawing2D;
Hasilkan kode halaman
menggunakan Sistem;
menggunakan Sistem.Data;
menggunakan Sistem.Konfigurasi;
menggunakan Sistem.Koleksi;
menggunakan Sistem.Web;
menggunakan Sistem.Web.Keamanan;
menggunakan Sistem.Web.UI;
menggunakan Sistem.Web.UI.WebControls;
menggunakan System.Web.UI.WebControls.WebParts;
menggunakan Sistem.Web.UI.HtmlControls;
menggunakan Sistem.Gambar;
menggunakan System.Drawing.Imaging;
menggunakan System.Drawing.Drawing2D;
kelas parsial publik getRandImg : System.Web.UI.Page
{
dilindungi kekosongan Page_Load (pengirim objek, EventArgs e)
{
//Hasilkan gambar kode acak
SetValidateCode();
//Halaman yang dihasilkan tidak disimpan ke cache
Respon.Cache.SetNoStore();
}
//Tetapkan kode verifikasi
kekosongan pribadi SetValidateCode()
{
//Buat bitmap baru
BitmapBitmap baru = Bitmap baru(
71,
dua puluh tiga,
PixelFormat.Format32bppArgb
);
//Dapatkan layar gambar dari bitmap
Grafik g = Grafik.FromImage(newBitmap);
//pembuat bilangan acak
Acak r = baru Acak();
//Hapus layar gambar
g.Jelas(Warna.Putih);
//Menggambar interferensi garis layar
untuk (int saya = 0; saya < 50; saya++)
{
int x1 = r.Berikutnya(Bitmap.Lebar baru);
int x2 = r.Berikutnya(Bitmap.Lebar baru);
int y1 = r.Berikutnya(Bitmap.Tinggi);
int y2 = r.Berikutnya(Bitmap.Tinggi);
g.DrawLine(Pena baru(
Warna.FromArgb(r.Berikutnya())),
x1,
kamu1,
x2,
kamu2
);
}
//Menggambar interferensi titik layar
untuk (int saya = 0; saya < 100; saya++)
{
int x = r.Berikutnya(Bitmap.Lebar baru);
int y = r.Berikutnya(Bitmap.Tinggi);
Bitmap baru.SetPixel(
X,
kamu,
Warna.FromArgb(r.Next())
);
}
//Dapatkan string acak (panjang 5 digit)
nilai string = GenerateRandom(5);
//Menetapkan string acak ke Sesi
Sesi["RandCode"] = nilai;
//Tentukan gaya font tampilan gambar
Font font = Font baru(
"Arial",
14,
FontStyle.Bold
);
Acak rr = baru Acak();
int yy = rr.Berikutnya(1, 4);
//Tentukan string acak untuk menampilkan kuas gambar
Kuas LinearGradientBrush = LinearGradientBrush baru(
Persegi Panjang baru (0, 0, 71, 23),
Warna. Merah,
Warna. Biru,
1.2f,
BENAR
);
g.DrawString(nilai, font, kuas, 2, yy);
g.DrawRectangle(Pena baru(
Warna. Perak),
0,
0,
70,
dua puluh dua
);
System.IO.MemoryStream ms = Sistem.IO.MemoryStream();
newBitmap.Simpan(ms, ImageFormat.Gif);
//Gambar keluaran
Respon.ClearContent();
Response.ContentType = "gambar/gif";
Respon.BinaryWrite(ms.ToArray());
}
//Set konstan
konstanta statis pribadi[] ={
'0','1','2','3','4','5','6','7','8','9',
'a','b','c','d','e','f','g','h','i','j',
'k','l','m','n','o','p','q','r','s','t',
'kamu','v','w','x','y','z'
};
//menghasilkan string acak
string statis publik GenerateRandom(int Panjang)
{
Sistem.Teks.StringBuilder newRandom = Sistem.Teks.StringBuilder(36);
Acak rd = baru Acak();
untuk (int i = 0; i < Panjang; i++)
{
newRandom.Append(konstan[rd.Berikutnya(36)]);
}
kembalikan newRandom.ToString();
}
}
Untuk halaman yang menggunakan gambar acak, kontrol IMAGE ditulis sebagai berikut:
<asp:Image ID="Image1" ImageUrl="~/getRandImg.aspx" runat="server" />
Contoh kode: http://www.cnblogs .com /heekui/archive/2007/01/06/613609.html