ユーザーログインモジュールを設計するとき、ハッカーソフトウェアによる悪意のあるクラッキングを効果的に防ぐことができる検証コードをよく使用します。ここで、私がよく使用する検証コードのソースコードを公開します。
使用方法:
1. 「CreateImage.cs」などのクラスを Web プロジェクトに追加し、そこに公開したソース コードをコピーします。
2. 「Image.aspx」などの新しい Web フォームを作成し、コード「CreateImage.DrawImage ();」を Page_Load に追加します。もちろん、クラスへの参照を追加することを忘れないでください。 !
3. 次の JavaScript コードをページ上の適切な位置 (確認コードを配置したい場所) に追加すればOKです。
ソースコードは次のとおりです。
///
///検証コードモジュール///
パブリック クラス CreateImage
{
パブリック静的 void DrawImage()
{
CreateImage img=new CreateImage();
HttpContext.Current.Session["CheckCode"]=img.RndNum(4);
img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
}
///
/// 検証画像を生成 ///
/// 文字を検証 private void CreateImages(string checkCode)
{
int iwidth = (int)(checkCode.Length * 13);
System.Drawing.Bitmap 画像 = 新しい System.Drawing.Bitmap(iwidth, 23);
グラフィックス g = Graphics.FromImage(image);
g.クリア(色.白);
//色の定義 Color[] c = {Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple};
//フォントを定義します string[] font = {"Verdana","Microsoft Sans Serif","Comic Sans MS","Arial","宋体"};
ランダム ランド = new Random();
//ノイズポイントをランダムに出力 for(int i=0;i<50;i++)
{
int x = rand.Next(image.Width);
int y = rand.Next(image.Height);
g.DrawRectangle(new Pen(Color.LightGray, 0),x,y,1,1);
}
//検証コード文字を異なるフォントと色で出力 for(int i=0;i
{
int cindex = rand.Next(7);
int findex = rand.Next(5);
Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
ブラシ b = 新しい System.Drawing.SolidBrush(c[cindex]);
int ii=4;
if((i+1)%2==0)
{
ii=2;
}
g.DrawString(checkCode.Substring(i,1), f, b, 3+(i*12), ii);
}
//境界線を描画します g.DrawRectangle(new Pen(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.Dispose();
image.Dispose();
}
///
/// ランダムな文字を生成 ///
/// 生成される文字の数 /// 文字列
プライベート文字列 RndNum(int VcodeNum)
{
文字列 Vchar = "0,1,2,3,4,5,6,7,8,9";
string[] VcArray = Vchar.Split(',') ;
string VNum = "" ; // 文字列が非常に短いため、StringBuilder は必要ありません int temp = -1 ; // 最後のランダム値を記録し、複数の同一の乱数を生成しないようにします // 確実に生成するために単純なアルゴリズムを使用します異なる乱数 Random ran =new Random();
for ( int i = 1 ; i < VcodeNum+1 ; i++ )
{
if (温度 != -1)
{
rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
}
int t = rand.Next(VcArray.Length );
if (温度 != -1 && 温度 == t)
{
RndNum(VcodeNum) を返します。
}
温度 = t;
VNum += VcArray[t];
}
VNum を返します。
}