C50108
  • 2019/0801/轉職成功路途開始
  • 自學心得與此網站使用方式
  • 行事曆&課程大綱
  • 2019/0224/自我檢視
  • 雜記
    • 2019/0103/雜記
    • 2019/0410/作品集建構
    • 2019/0429/職訓局書單
    • 2019/0317/自我檢視
    • 2019/0316/陪玄松去高車討論&環境圖流程圖大神們line討論
    • 2019/0305/Gitbook使用方法
  • 2018/10XX/轉職心路歷程
  • 職訓局里程碑
    • 201901
      • 2019/0103/行動商務系統設計與開發,職訓局報到
      • 2019/0104/正式開課日&行動商務課程簡介
      • 2019/0108/資料庫理論/Access&WEB開發簡介
      • 2019/0109/資料庫資料型態屬性&HTMLtag
      • 2019/0110/計概基礎概念
      • 2019/0111/HTML表格table&form表單_post/get&iframe
      • 2019/0114/計&網概概念&網路層概念
      • 2019/0115/資料庫Access運算值&CSS簡介&在職班補充
      • 2019/0116/Access比較/邏輯運算&CSS_在職班補充+選擇器+Box model
      • 2019/0117/資訊系統架構&網路層
      • 2019/0118/資料庫正規化
      • 2019/0121/計概IT分工&資料庫正規化
      • 2019/0122/網路層&CSS父子容器切版
      • 2019/0123/Access資料庫關聯&CSS position&偵錯
      • 2019/0124/C#宣告、指定運算子
      • 2019/0125/VM虛擬機_基礎介紹
      • 2019/0128/VM虛擬機架設_虛擬網卡設定&伺服器權限設置
      • 2019/0129/Wireshark查詢網路層&資料庫物件導向
      • 2019/0130/ERmod雞爪圖&C#if、for時間複雜度
      • 2019/0131/C#流程控制&變數型別
    • 201902
      • 2019/0201/系統分析與設計_資料庫ERmod&c#Homework
      • 2019/0211/ASP.NET_Webforms&物件命名空間
      • 2019/0212/定址&網路遮罩
      • 2019/0213/SQLSeverM.S.介紹&AspWebforms表單控制項
      • 2019/0214/網概乙太網路&網路安全
      • 2019/0215/Pre Javascript 基礎 & 在職班補充
      • 2019/0218/TSQL基本指令&ASP.net左右置換表格/驗證傳值
      • 2019/0219/Javascript終極密碼&musicplay&asp.net驗證器
      • 2019/0220/SS基本語法&網概line機器人
      • 2019/0221/前端Javascript musicplay、內聚力耦合率
      • 2019/0222/前端Javascript musicplay、內聚力耦合率&伺服器權限
      • 2019/0223/SqlServerHomework&第一次專案報告
      • 2019/0225/SS合併查詢&ASP.NET驗證器
      • 2019/0226/伺服器ntfs安全性權限/共用權限
      • 2019/0227/Javascript_music_play_end&ASP.net串聯SQL(datasource就是拿來串SQLServer的)
    • 201903
      • 2019/0304/SS集合運算/子查詢/exists&asp.net GridView 事件 OnRowDataBound
      • 2019/0305/SS查詢式end&ASP.NET_Gridview_自訂樣式分頁
      • 2019/0306/Javascript musicplay_really_end
      • 2019/0307/前端HTML5鑲嵌字型&伺服器網域概念
      • 2019/0308/Android Studio_基礎概念&開發環境建置
      • 2019/0311/胡中興 工業4.0講習
      • 2019/0312/安卓系統_開發基礎介紹
      • 2019/0313/安卓工作室_基礎/布局內元件
      • 2019/0314/Asp.net鏈結資料庫-查詢
      • 2019/0315/SQS DML&第二次專案報告
      • 2019/0318/SQL DDL & 伺服器 自學基礎
      • 2019/0319/Android Studio_布局內元件&佈局規劃元件
      • 2019/0320/SQL檢視表&tsql基礎&Asp.net_Gridview
      • 2019/0321/TSQL&TDM&ASP.NET_Datalist
      • 2019/0322/DOM&JQ基礎&系統分析設計PPT&在職班補充
      • 2019/0325/TMD&Asp.net上傳圖片/產生QRCode
      • 2019/0326/SQLServer_預存程序+函數&Asp.net_Webforms半自動鏈結資料庫與自動化更新
      • 2019/0327/安卓工作室_佈局規劃元件
      • 2019/0328/jQuery選擇器應用&Ajax導讀+應用&asp.net串sserver_註冊帳號功能
      • 2019/0329/ADDS伺服器架設&第三次專題報告
    • 201904
      • 2019/0401/SQL觸發程序&Asp.net自動寄信&認證信
      • 2019/0402/前端作業四-jQ應用轉換樣式&ASP.NET_FormView控制項-會員資料維護實例
      • 2019/0403/JQ事件動畫&股市&Usecase
      • 2019/0408/安卓工作室_元件/布局基本end
      • 2019/0409/安卓工作室-物件導向事件驅動實作+Homework1&2
      • 2019/0410/上午小組討論-作品集自習&Visual studio webform+MVC範本
      • 2019/0411/安卓工作室-UI觸發委派函式與控制物件
      • 2019/0412/JQ動畫實做(寶可夢遊戲開場)&第四次專題報告
      • 2019/0415/前端JQ-Ajax+JSON&後端ADO建置、主板頁面概念控制項、Bootstrap演示
      • 2019/0416/安卓工作室UI控件案例結束、IDE Eclipse_Java物件導向基礎
      • 2019/0417/伺服器網域ADDNS&416LINE討論
      • 2019/0418/SQL指標、索引&Use cace
      • 2019/0419/主頁、Webform ADO.NET Entity Fromwork 增刪修實作&第五次專題報告
      • 2019/0423/Java基礎(型別/溢位/自動強制型別轉換/鑄造物件/串流/)&I/O物件用法(底層/較不底層)
      • 2019/0424/Bootstrap_RWD基礎/應用&Asp.Net_MVC實作增刪修(修待補)
      • 2019/0425/伺服器IIS安裝&資料匯入與管理
      • 2019/0426/Asp.Net_MVC增刪修實作(補修)&bootstrap – gridsystem– 網格系統&第六次專題報告&全國技能競賽網頁設計
      • 2019/0429/物件導向技術原理方法實作
      • 2019/0430/資料庫設計應用效能調教_SQL all end&ASP.NET_MVC_Controller單元_純C無V無M操作/簡單複雜繫結
    • 201905
      • 2019/0501/內部網站辨識&外部DNS域名/IP+自架DNS伺服器理解
      • 2019/0502/Java語言基礎、物件導向基礎
      • 2019/0503/Asp.net泛型處理常式驗證圖片應用&第七次專題報告Usecase
      • 2017/0506/Bs_FlexBox&Asp.Net_MVC_View+Razor@+Viewbag+helper
      • 2019/0507/Java 物件導向_類別+函式觀念&階段性作業三
      • 2019/0508/Asp.Net_MVC_Model_ADO.NET+Entityframework+LoginMember實作+MVC觀念
      • 2019/0509/Java物件導向(函式)_儲存型態+回傳值+多載+自制+例外處理+this參照+存取+複合
      • 20919/0510/第八次專題報告=功能DEMO
      • 2019/0514/Java_靜態類別+繼承特性
      • 2019/0515/RWD Utility+Card&MVC ViewModel+CRUD(RD)
      • 2019/0516/BS form&驗證+JQ驗證 & MVC_CRUD(CU)
      • 2019/0517/ASP.NET Webform介紹Master page 主頁 & Session 簡介 & 登入login驗證 & 隱碼攻擊injection & 工具箱程式碼片段使用
      • 2019/0520/繼承&存取權特性+java作業四+字符串格式化+多形+抽象類別
      • 2019/0521/抽象類別+介面
      • 2019/0522/Bootstrap Components 元件介紹 + MVC API 概念&實作
      • 2019/0523/IIS IP限制&ASP.NET部屬
      • 2019/0524/WebApi異質程式連線方式&第九次專題報告_循序圖
      • 2019/0528/Bootstrap Components 元件介紹 + MVC 登入驗證 + 商品加入購物車 實作
      • 2019/0529/ASP.NET_MVC購物車訂單功能完成+BootstrapComponents元件介紹
      • 2019/0530/原本是伺服器的課,但拿來做專題。
      • 2019/0531/ASP.NET_WebformAllView物件功能清單&ListView實作&第十次專案報告(完整循序圖)
    • 201906
      • 2019/0603/Bootstrap Components RWD End + ASP.NET_MVC Part2 PhotoSharing CodeFirst & Model 驗證
      • 2019/0604/ASP.NET_MVC Part2 PhotoSharing Controller & Filter & ADO.NET & View@RAZOR Helper
      • 2019/0605/Java介面實作&結束+安卓工作室(整合Layout與Java)Intent意圖&Bundle包裹
      • 2019/0606/第十一次專案報告功能demo+SingnaIR+伺服器作業+端午歌唱比賽
      • 2019/0609/黃大神傳授Visual_Studio&除錯技巧
      • 2019/0610/番外篇 Web Socket 即時連線& 就業前準備與技巧
      • 2019/0611/安卓工作室_(意圖+隱含意圖)資料傳遞+Android生命週期+硬體裝置與應用
      • 2019/0612/WebSockets Notification + MVC Part2 PhotoSharing PartialView & ADO.NET & EntitySQL & VMd
      • 2019/0613/MVC Part2 PhotoSharing ViewModel & ErrorHandle
      • 2019/0614/第十二次專案報告 功能Demo
      • 2019/0618/MVC Part2 PhotoSharing Route & Sitemap & _LayOut & AJAX
      • 2019/0618/RWD在職班_(Javascript_object-oriented programming)
      • 2019/0619/安卓工作室_(硬體裝置與應用)相機操作&GPS+階段性作業6+延伸 ( APP End )
      • 2019/0620/MVC補充C#MS SQL匯入CSV+上傳CSV存入MS SQL
      • 2019/0621/第十三次專案報告 功能Demo
    • 2019/0701/最終專案報告
    • 2019/0702/結訓與家人遊台東預計0708開始找工作自學筆記應該會等工作穩定後繼續開始
  • 自學里程碑
    • 201901
      • 2019/0107/DR
      • 2019/0108/UW
      • 2019/0103/Git
      • 2019/0103/CS
      • 2019/0115/Vscode
      • 2019/0116/JSON&AJAX
      • 2019/0122/卡內基
      • 2019/0126/MBTI
      • 2019/0131/PDP 外在 內在
    • 201902
      • 2019/0217/huli_half Developer
      • 2019/0219/SEO
      • 2019/0219/雪球速讀法
    • 201903
      • 2019/0304/asp、php、jsp、asp.net、net. Framework、asp.net core
      • 2019/0329/網站架站初嘗試
    • 201904
      • 2019/0415/Datatype-Explanation
      • 2019/0416/ASP.NET_Webform&Core&MVC(MVVM/MVP)
    • 201905
      • 2019/0613/開發職訓局共同專案時遇到的問題與解法
      • 2019/0514/ASP.NET SignalR
      • 2019/0514/JS擴展-JQ、React、Vue、Angular...
      • 2019/0514/Sass&Scss
      • 2019/0514/MVC結合Webform
      • 2019/0515/ASP.NET MVC_TempData/ViewData/ViewBag
      • 2019/0522/[自學筆記]海綿體啟蒙??
Powered by GitBook
On this page
  • #40GGetAuthImg.aspx
  • 題外話:
  • 回正題
  • 邏輯
  • #下午第六次專案報告 usecase
  • ##下禮拜報告 組別進度

Was this helpful?

  1. 職訓局里程碑
  2. 201905

2019/0503/Asp.net泛型處理常式驗證圖片應用&第七次專題報告Usecase

Previous2019/0502/Java語言基礎、物件導向基礎Next2017/0506/Bs_FlexBox&Asp.Net_MVC_View+Razor@+Viewbag+helper

Last updated 6 years ago

Was this helpful?

#40GGetAuthImg.aspx

一般html url要求容易看出伺服器資料夾檔案結構所以需要驗證做安全性管理

而MVC url 要求 token所以就不需要圖形驗證?

寫程式方式去畫圖所以CODE會多一點

預防機器人字典攻擊法

不能用文字驗證要用圖片顯示文字不然爬蟲一爬原始檔就知道了

但機器人也可以圖像判斷

所以圖形必須要做干擾讓機器人辨識錯誤但在機器人統計學時代會越來越不適用所以才要用token

題外話:

AI 在我們這個領域 只講機器學習 而不是人工智慧

機器學習 VS 統計學(應用數學)

老師個人健檢 機器學習可以被訓練

股票前20年股票狀況

24個月4月紅20黑所以5月份跌機率較大

那今年5月份跌或長?

根據統計學來判斷80%

但是人工智慧希望做到能夠精準

直接告訴你今天5越漲或跌

會自己學習經過無數次淬鍊(失敗)會自己改進學習???!!!

模型 演算法 學習能力

Deep 深入學習 單一領域很強

逐筆交易每秒合單機器下單

投信?多殺多?賣點賣結果更跌倒置另外一個投信的賣點賣更跌跌

所以當大家都用機器再判斷有個人知道邏輯就能去找弱點

R適合用在商務統計 立即效果

python理工蒐集資料 ( 爬蟲 非結構化資料

更早以前是 perl 因為python可以爬網頁

大數據放到哈頓普Hadoop提升效能?

老師看好scala

但…

回正題

泛型處理常式 跟 api 很像

黑盒子 要什麼給什麼 但泛型處理常識沒有介面

但還是要把圖形丟到Interface (不實做??) 來使用

泛型處理常式以前是qrcode產生

現在40GetAuthImg泛型處理常式

邏輯

UX考輛 I大寫哀 l小寫L 大寫歐O數字零0

私有函數產生隨機號碼反傳隨機號碼字串

Random物件做操作

以上為何要分為另外一個函數原因為參數化 ( 做成活的

接著要來用這串亂碼參數產生圖片

首先先用一個 Bitmap物件然後用第4種多載(圖的高寬)將亂碼產生bitmap再

去產生graphics圖像物件

這時就畫好圖了這時是黑白的容易被機器人辨識

所以至少做三種漸層並隨機產生rgb

一樣用random物件

然後用color物件去操控顏色數據拿來給graphics物件使用

graphics物件操控清除背景色改為剛剛的亂數顏色數據

接著要用噪音線繼續模糊圖片干擾機器辨識

怎再graphics畫線?

有個方法為drawline

操控物件去drawline有四種多載 我們用第一個

要用silver這支筆

然後給bitmap值的長寬來設置產生噪音線的界線

然後用迴圈畫個80次

接著用矩形物件產生一個矩形

Rectangle給長寬就會畫出一個矩形

所以我們給定bitmap的長寬給他就好

剛剛是整個框內的顏色接著是文字的顏色

將剛剛的亂數取色變數拿來做起始色與結束色用來

System.drawing.drawing2d裡面的lineargradientbrush物件線性筆刷(畫在矩形框內,開頭色,結素色,角度)

接著設定字行(沒設定就是預設的

字型 大小 加粗

接著把字畫進去框框g圖片物件操控

g.drawstring(哪串字,字形,筆刷,位址)

參數都是剛剛上面操控物件之後的變數反傳值

接著要做噪音點setpixel ( 為啥不剛剛噪音線時做?

因為有圖片階層問題 誰先做 誰就在底下

在這做就會蓋住字 但噪音線比字早做所以只會蓋住背景

但方式一樣 只差在只要取 xy即可 不用 x1y1x2y2 因為是點不是線

顏色要用rgb所以fromargb從剛剛上面的亂數 r.next(256)取

然後迴圈幫忙點個500次

用程式畫東西就是這樣沒有介面無法直接看到東西

最後畫外框線

操控g圖片物件用drawrectangle畫

然後用image物件把剛剛的東西都放進去讓他成為一個圖片(檔案可以但不必要

不然會超級多因為只有當下需要用)

操控img物件存成一張圖片的記憶體

圖片位置不一定是檔案也可能是暫存記憶體裡面

利用memory stream 或 file stream 物件去暫時存

Img.save(存在哪,存什麼格式)用第二種多載

最後輸出

清空Context.Response.Clear() barfer緩衝區 ??

指定型態

然後轉成二進置才能用http傳

最後

去前端呼叫泛型處理常式就會返傳圖片

泛型處理常式其實像是介面或是api 會有反傳值過去呼叫的地方

泛型處理常式不用寫建構子用預設的就好

-----------

還沒講完 現在只是產生圖片 要做驗證對錯 還有 重新產生按鈕

重新產生按鈕只要在前端弄個按鈕重新呼叫泛型處理常式即可

但驗證要利用 session物件 保留生命狀態

再 泛型處理常式內

把剛剛的亂數數字包裹 ( 特殊變數 )

跟區域變數不同

變數生命週期再產生之後到瀏覽器被關掉之前

站內每一個網頁都可以取到session的值

但記得必須要 using sessionstate

繼承irequiressessionstate

接著去後端去將 session轉型成string去比對 textbox2

如果是就驗證通過

不是就不通過

不通過不能post 所以要把驗證器改成 Validator

###40GetAuthImg.ashx泛型處理常式前端程式碼

<%@ WebHandler Language="C#" CodeBehind="40GetAuthImg.ashx.cs" Class="ASPnet._40GetAuthImg" %>

###40GetAuthImg.ashx.cs泛型處理常式後端程式碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing;
using System.IO;
using System.Web.SessionState;

namespace ASPnet
{
    /// <summary>
    /// _40GetAuthImg 的摘要描述
    /// </summary>
    public class _40GetAuthImg : IHttpHandler, IRequiresSessionState
    {

        public void ProcessRequest(HttpContext context)
        {
            int NumCount = 6;
            string strNumber= GetARandomNumber(NumCount);
            context.Session["Number"] = strNumber;

            //產生一個圖片
            Bitmap img = new Bitmap(strNumber.Length * 25, 40);
            //用bitmap產生一個Graphics物件
            Graphics g = Graphics.FromImage(img);

            Random r = new Random();
            int intRed = r.Next(0,256);
            int intGreen = r.Next(0, 256);
            int intBlue = r.Next(0, 256);

            g.Clear(Color.FromArgb(1, intRed, intGreen, intBlue));


            //畫噪音線
            for (int i = 0; i < 60; i++)
            {
                int x1 = r.Next(img.Width);
                int y1 = r.Next(img.Height);
                int x2 = r.Next(img.Width);
                int y2 = r.Next(img.Height);

                g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
            }

            //用矩形物件產生一個矩形
            Rectangle MyRect = new Rectangle(0, 0, img.Width, img.Height);
            intRed = r.Next(0, 256);
            intGreen = r.Next(0, 256);
            intBlue = r.Next(0, 256);
            Color color1 = Color.FromArgb(intRed, intGreen, intBlue);

            intRed = r.Next(0, 256);
            intGreen = r.Next(0, 256);
            intBlue = r.Next(0, 256);
            Color color2 = Color.FromArgb(intRed, intGreen, intBlue);

            //文字的顏色(漸層色)
            System.Drawing.Drawing2D.LinearGradientBrush brush = 
                new System.Drawing.Drawing2D.LinearGradientBrush(MyRect,color1,color2, 1.2f);

            //設定字型
            Font font = new Font("Arial Black", 20, FontStyle.Bold);

            //把字畫在矩形框中
            g.DrawString(strNumber, font, brush, 5, 5);

            //噪音點
            for (int i = 0; i < 300; i++)
            {
                int x1 = r.Next(img.Width);
                int y1 = r.Next(img.Height);
              
                img.SetPixel(x1,y1,Color.FromArgb(r.Next(256)));
            }

            //畫外框線
            g.DrawRectangle(new Pen(Color.Silver), 0, 0, img.Width - 1, img.Height - 1);

            //把Bitmap放入Image物件中
            Image image = img;

            //將圖片存成JPG格式置於記憶體中
            MemoryStream ms = new MemoryStream();
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

            //output
            context.Response.Clear();
            context.Response.ContentType = "image/jpeg";
            context.Response.BinaryWrite(ms.ToArray());

        }


        private string GetARandomNumber(int n)
        {
            string strNumber = "";
            Random r = new Random();
            for(int i=0;i<n;i++)
            {
                strNumber += r.Next(0,10);
            }

            return strNumber;
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

###40GGetAuthImg.aspx前端程式碼

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="40GGetAuthImg.aspx.cs" Inherits="ASPnet._40GGetAuthImg" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
            帳號:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <br />
            <img src="40GetAuthImg.ashx" />
            <asp:Button ID="Button2" runat="server" Text="重新產生" />

            <br />
            驗證碼:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
 
            <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
            <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
        </div>
       
    </form>
</body>
</html>

###40GGetAuthImg.aspx.cs後端程式碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ASPnet
{
    public partial class _40GGetAuthImg : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            if(TextBox2.Text== Session["Number"].ToString())
            {
                Label1.Text = "驗證碼正確";

            }
            else
                Label1.Text = "驗證碼不正確";
        }

     
    }
}

###範例圖片

#下午第六次專案報告 usecase

感覺沒啥用就不做每組紀錄了

##下禮拜報告 組別進度

asp.net web form的驗證控制項(Validator)
mvc token 是什麼 - Google SearchGoogle
Hadoop - Google SearchGoogle
Bitmap - Google SearchGoogle
session client - Google SearchGoogle
Logo
Logo
Logo
Logo