1. 關於用戶登錄方式
一、了解Windows XP的
幾種登錄類型
1. 互動式登錄
互動式登錄是我們平常登錄時最常見的類型,就是用戶通過相應的用戶賬號(User Account)和密碼在本機進行登錄。有些網友認為「互動式登錄」就是「本地登錄」,其實這是錯誤的。「互動式登錄」還包括「域賬號登錄」,而「本地登錄」僅限於「本地賬號登錄」。
這里有必要提及的是,通過終端服務和遠程桌面登錄主機,可以看做「互動式登錄」,其驗證的原理是一樣的。
在互動式登錄時,系統會首先檢驗登錄的用戶賬號類型,是本地用戶賬號(Local User Account),還是域用戶賬號(Domain User Account),再採用相應的驗證機制。因為不同的用戶賬號類型,其處理方法也不同。
◇ 本地用戶賬號
採用本地用戶賬號登錄,系統會通過存儲在本機SAM資料庫中的信息進行驗證。所以也就是為什麼Windows2000忘記Administrator密碼時可以用刪除SAM文件的方法來解決。不過對於Windows XP則不可以,可能是出於安全方面的考慮吧。用本地用戶賬號登錄後,只能訪問到具有訪問許可權的本地資源。(圖1)
圖1
◇域用戶賬號
採用域用戶賬號登錄,系統則通過存儲在域控制器的活動目錄中的數據進行驗證。如果該用戶賬號有效,則登錄後可以訪問到整個域中具有訪問許可權的資源。
小提示:如果計算機加入域以後,登錄對話框就會顯示「登錄到:」項目,可以從中選擇登錄到域還是登錄到本機。
2. 網路登錄
如果計算機加入到工作組或域,當要訪問其他計算機的資源時,就需要「網路登錄」了。如圖2,當要登錄名稱為Heelen的主機時,輸入該主機的用戶名稱和密碼後進行驗證。這里需要提醒的是,輸入的用戶賬號必須是對方主機上的,而非自己主機上的用戶賬號。因為進行網路登錄時,用戶賬號的有效性是由受訪主機控制的。
圖2
3. 服務登錄
服務登錄是一種特殊的登錄方式。平時,系統啟動服務和程序時,都是先以某些用戶賬號進行登錄後運行的,這些用戶賬號可以是域用戶賬號、本地用戶賬號或SYSTEM賬號。採用不同的用戶賬號登錄,其對系統的訪問、控制許可權也不同,而且,用本地用戶賬號登錄,只能訪問到具有訪問許可權的本地資源,不能訪問到其他計算機上的資源,這點和「互動式登錄」類似。
從圖3的任務管理器中可以看到,系統的進程所使用的賬號是不同的。當系統啟動時,一些基與Win32的服務會被預先登錄到系統上,從而實現對系統的訪問和控制。運行Services.msc,可以設置這些服務。由於系統服務有著舉足輕重的地位,一般都以SYSTEM賬號登錄,所以對系統有絕對的控制許可權,因此很多病毒和木馬也爭著加入這個貴族體系中。除了SYSTEM,有些服務還以Local Service和Network Service這兩個賬號登錄。而在系統初始化後,用戶運行的一切程序都是以用戶本身賬號登錄的。
圖3
從上面講到的原理不難看出,為什麼很多電腦文章告訴一般用戶,平時使用計算機時要以Users組的用戶登錄,因為即使運行了病毒、木馬程序,由於受到登錄用戶賬號相應的許可權限制,最多也只能破壞屬於用戶本身的資源,而對維護系統安全和穩定性的重要信息無破壞性。
4. 批處理登錄
批處理登錄一般用戶很少用到,通常被執行批處理操作的程序所使用。在執行批處理登錄時,所用賬號要具有批處理工作的權利,否則不能進行登錄。
平常我們接觸最多的是「互動式登錄」,所以下面筆者將為大家詳細講解「互動式登錄」的原理。
二、互動式登錄,系統用了哪些組件
1. Winlogon.exe
Winlogon.exe是「互動式登錄」時最重要的組件,它是一個安全進程,負責如下工作:
◇載入其他登錄組件。
◇提供同安全相關的用戶操作圖形界面,以便用戶能進行登錄或注銷等相關操作。
◇根據需要,同GINA發送必要信息。
2. GINA
GINA的全稱為「Graphical Identification and Authentication」——圖形化識別和驗證。它是幾個動態資料庫文件,被Winlogon.exe所調用,為其提供能夠對用戶身份進行識別和驗證的函數,並將用戶的賬號和密碼反饋給Winlogon.exe。在登錄過程中,「歡迎屏幕」和「登錄對話框」就是GINA顯示的。
一些主題設置軟體,例如StyleXP,可以指定Winlogon.exe載入商家自己開發的GINA,從而提供不同的Windows XP的登錄界面。由於這個可修改性,現在出現了盜取賬號和密碼的木馬。
一種是針對「歡迎屏幕」登錄方式的木馬,它模擬了Windows XP的歡迎界面。當用戶輸入密碼後,就被木馬程序所獲取,而用戶卻全然不知。所以建議大家不要以歡迎屏幕來登錄,且要設置「安全登錄」。
另一種是針對登錄對話框的GINA木馬,其原理是在登錄時載入,以盜取用戶的賬號和密碼,然後把這些信息保存到%systemroot%system32下的WinEggDrop.dat中。該木馬會屏蔽系統以「歡迎屏幕」方式登錄和「用戶切換」功能,也會屏蔽「Ctrl-Alt-Delete」的安全登錄提示。
用戶也不用太擔心被安裝了GINA木馬,筆者在這里提供解決方案給大家參考:
◇正所謂「解鈴還需系鈴人」,要查看自己電腦是否安裝過GINA木馬,可以下載一個GINA木馬程序,然後運行InstGina -view,可以查看系統中GinaDLL鍵值是否被安裝過DLL,主要用來查看系統是否被人安裝了Gina木馬作為登錄所用。如果不幸被安裝了GINA木馬,可以運行InstGina -Remove來卸載它。
3. LSA服務
LSA的全稱為「Local Security Authority」——本地安全授權,Windows系統中一個相當重要的服務,所有安全認證相關的處理都要通過這個服務。它從Winlogon.exe中獲取用戶的賬號和密碼,然後經過密鑰機制處理,並和存儲在賬號資料庫中的密鑰進行對比,如果對比的結果匹配,LSA就認為用戶的身份有效,允許用戶登錄計算機。如果對比的結果不匹配,LSA就認為用戶的身份無效。這時用戶就無法登錄計算機。
怎麼看這三個字母有些眼熟?對了,這個就是和前陣子鬧得沸沸揚揚的「震盪波」 扯上關系的服務。「震盪波」蠕蟲就是利用LSA遠程緩沖區溢出漏洞而獲得系統最高許可權SYSTEM來攻擊電腦的。解決的方法網上很多資料,這里就不多講了。
4. SAM資料庫
SAM的全稱為「Security Account Manager」——安全賬號管理器,是一個被保護的子系統,它通過存儲在計算機注冊表中的安全賬號來管理用戶和用戶組的信息。我們可以把SAM看成一個賬號資料庫。對於沒有加入到域的計算機來說,它存儲在本地,而對於加入到域的計算機,它存儲在域控制器上。
如果用戶試圖登錄本機,那麼系統會使用存儲在本機上的SAM資料庫中的賬號信息同用戶提供的信息進行比較;如果用戶試圖登錄到域,那麼系統會使用存儲在域控制器中上的SAM資料庫中的賬號信息同用戶提供的信息進行比較。
5. Net Logon服務
Net Logon服務主要和NTLM(NT LAN Manager,Windows NT 4.0 的默認驗證協議)協同使用,用戶驗證Windows NT域控制器上的SAM資料庫上的信息同用戶提供的信息是否匹配。NTLM協議主要用於實現同Windows NT的兼容性而保留的。
6. KDC服務
KDC(Kerberos Key Distribution Center——Kerberos密鑰發布中心)服務主要同Kerberos認證協議協同使用,用於在整個活動目錄范圍內對用戶的登錄進行驗證。如果你確保整個域中沒有Windows NT計算機,可以只使用Kerberos協議,以確保最大的安全性。該服務要在Active Directory服務啟動後才能啟用。
7. Active Directory服務
如果計算機加入到Windows 2000或Windows 2003域中,則需啟動該服務以對Active Directory(活動目錄)功能的支持。
三、登錄前後,Winlogon到底幹了什麼
如果用戶設置了「安全登錄」,在Winlogon初始化時,會在系統中注冊一個SAS (Secure Attention Sequence——安全警告序列)。SAS是一組組合鍵,默認情況下為Ctrl-Alt-Delete。它的作用是確保用戶互動式登錄時輸入的信息被系統所接受,而不會被其他程序所獲取。所以說,使用「安全登錄」進行登錄,可以確保用戶的賬號和密碼不會被黑客盜取。要啟用「安全登錄」的功能,可以運行「Control userpasswords2」命令,打開「用戶賬戶」對話框,選擇「高級」。(如圖4)選中「要求用戶按Ctrl-Alt-Delete」選項後確定即可。以後,在每次登錄對話框出現前都有一個提示,要求用戶按Ctrl-Alt-Delete組合鍵,目的是為了在登錄時出現Windows XP的GINA登錄對話框,因為只有系統本身的GINA才能截獲這個組合鍵信息。而如前面講到的GINA木馬,會屏蔽掉「安全登錄」的提示,所以如果「安全登錄」的提示無故被屏蔽也是發現木馬的一個前兆。「安全登錄」功能早在Windows 2000時就被應用於保護系統安全性。
圖4
在Winlogon注冊了SAS後,就調用GINA生成3個桌面系統,在用戶需要的時候使用,它們分別為:
◇Winlogon桌面 用戶在進入登錄界面時,就進入了Winlogon桌面。而我們看到的登錄對話框,只是GINA負責顯示的。
如果用戶取消以「歡迎屏幕」方式登錄,在進入Windows XP中任何時候按下「Ctrl-Alt-Delete」,都會激活Winlogon桌面,並顯示圖5的「Windows安全」對話框(注意,Winlogon桌面並不等同對話框,對話框只是Winlogon調用其他程序來顯示的)。
圖5
◇用戶桌面 用戶桌面就是我們日常操作的桌面,它是系統最主要的桌面系統。用戶需要提供正確的賬號和密碼,成功登錄後才能顯示「用戶桌面」。而且,不同的用戶,Winlogon會根據注冊表中的信息和用戶配置文件來初始化用戶桌面。
◇屏幕保護桌面 屏幕保護桌面就是屏幕保護,包括「系統屏幕保護」和「用戶屏幕保護」。在啟用了「系統屏幕保護」的前提下,用戶未進行登錄並且長時間無操作,系統就會進入「系統屏幕保護」;而對於「用戶屏幕保護」來說,用戶要登錄後才能訪問,不同的用戶可以設置不同的「用戶屏幕保護」。
四、想登錄,也要過GINA這一關
在「互動式登錄」過程中,Winlogon調用了GINA組文件,把用戶提供的賬號和密碼傳達給GINA,由GINA負責對賬號和密碼的有效性進行驗證,然後把驗證結果反饋給Winlogon程序。在與Winlogon.exe對話時,GINA會首先確定Winlogon.exe的當前狀態,再根據不同狀態來執行不同的驗證工作。通常Winlogon.exe有三種狀態:
1. 已登錄狀態
顧名思義,用戶在成功登錄後,就進入了「已登錄狀態」。在此狀態下,用戶可以執行有控制許可權的任何操作。
2. 已注銷狀態
用戶在已登錄狀態下,選擇「注銷」命令後,就進入了「已注銷狀態」,並顯示Winlogon桌面,而由GINA負責顯示登錄對話框或歡迎屏幕。
3. 已鎖定狀態
當用戶按下「Win+L」鍵鎖定計算機後,就進入了「已鎖定狀態」。在此狀態下,GINA負責顯示可供用戶登錄的對話框。此時用戶有兩種選擇,一種是輸入當前用戶的密碼返回「已登錄狀態」,另一種是輸入管理員賬號和密碼,返回「已注銷狀態」,但原用戶狀態和未保存數據丟失。
五、登錄到本機的過程
1. 用戶首先按Ctrl+Alt+Del組合鍵。
2. Winlogon檢測到用戶按下SAS鍵,就調用GINA,由GINA顯示登錄對話框,以便用戶輸入賬號和密碼。
3. 用戶輸入賬號和密碼,確定後,GINA把信息發送給LSA進行驗證。
4. 在用戶登錄到本機的情況下,LSA會調用Msv1_0.dll這個驗證程序包,將用戶信息處理後生成密鑰,同SAM資料庫中存儲的密鑰進行對比。
5. 如果對比後發現用戶有效,SAM會將用戶的SID(Security Identifier——安全標識),用戶所屬用戶組的SID,和其他一些相關信息發送給LSA。
6. LSA將收到的SID信息創建安全訪問令牌,然後將令牌的句柄和登錄信息發送給Winlogon.exe。
7. Winlogon.exe對用戶登錄稍作處理後,完成整個登錄過程。
六、登錄到域的過程
登錄到域的驗證過程,對於不同的驗證協議也有不同的驗證方法。如果域控制器是Windows NT 4.0,那麼使用的是NTLM驗證協議,其驗證過程和前面的「登錄到本機的過程」差不多,區別就在於驗證賬號的工作不是在本地SAM資料庫中進行,而是在域控制器中進行;而對於Windows 2000和Windows 2003域控制器來說,使用的一般為更安全可靠的Kerberos V5協議。通過這種協議登錄到域,要向域控制器證明自己的域賬號有效,用戶需先申請允許請求該域的TGS(Ticket-Granting Service——票據授予服務)。獲准之後,用戶就會為所要登錄的計算機申請一個會話票據,最後還需申請允許進入那台計算機的本地系統服務。
其過程如下:
1. 用戶首先按Ctrl+Alt+Del組合鍵。
2. Winlogon檢測到用戶按下SAS鍵,就調用GINA,由GINA顯示登錄對話框,以便用戶輸入賬號和密碼。
3. 用戶選擇所要登錄的域和填寫賬號與密碼,確定後,GINA將用戶輸入的信息發送給LSA進行驗證。
4. 在用戶登錄到本機的情況下,LSA將請求發送給Kerberos驗證程序包。通過散列演算法,根據用戶信息生成一個密鑰,並將密鑰存儲在證書緩存區中。
5. Kerberos驗證程序向KDC(Key Distribution Center——密鑰分配中心)發送一個包含用戶身份信息和驗證預處理數據的驗證服務請求,其中包含用戶證書和散列演算法加密時間的標記。
6. KDC接收到數據後,利用自己的密鑰對請求中的時間標記進行解密,通過解密的時間標記是否正確,就可以判斷用戶是否有效。
7. 如果用戶有效,KDC將向用戶發送一個TGT(Ticket-Granting Ticket——票據授予票據)。該TGT(AS_REP)將用戶的密鑰進行解密,其中包含會話密鑰、該會話密鑰指向的用戶名稱、該票據的最大生命期以及其他一些可能需要的數據和設置等。用戶所申請的票據在KDC的密鑰中被加密,並附著在AS_REP中。在TGT的授權數據部分包含用戶賬號的SID以及該用戶所屬的全局組和通用組的SID。注意,返回到LSA的SID包含用戶的訪問令牌。票據的最大生命期是由域策略決定的。如果票據在活動的會話中超過期限,用戶就必須申請新的票據。
8. 當用戶試圖訪問資源時,客戶系統使用TGT從域控制器上的Kerberos TGS請求服務票據(TGS_REQ)。然後TGS將服務票據(TGS_REP)發送給客戶。該服務票據是使用伺服器的密鑰進行加密的。同時,SID被Kerberos服務從TGT復制到所有的Kerberos服務包含的子序列服務票據中。
9. 客戶將票據直接提交到需要訪問的網路服務上,通過服務票據就能證明用戶的標識和針對該服務的許可權,以及服務對應用戶的標識。
七、我要偷懶——設置自動登錄
為了安全起見,平時我們進入Windows XP時,都要輸入賬號和密碼。而一般我們都是使用一個固定的賬號登錄的。面對每次煩瑣的輸入密碼,有的朋友乾脆設置為空密碼或者類似「123」等弱口令,而這些賬號也多數為管理員賬號。殊不知黑客用一般的掃描工具,很容易就能掃描到一段IP段中所有弱口令的計算機。
所以,還是建議大家要把密碼盡量設置得復雜些。如果怕麻煩,可以設置自動登錄,不過自動登錄也是很不安全的。因為自動登錄意味著能直接接觸計算機的人都能進入系統;另一方面,賬號和密碼是明文保存在注冊表中的,所以任何人,只要具有訪問注冊表的許可權,都可以通過網路查看。因此如果要設置登錄,最好不要設置為管理員賬號,可以設置為USERS組的用戶賬號。設置自動登錄的方法是:運行「Control userpasswords2」,在「用戶賬戶」窗口中取消「要使用本機,用戶必須輸入用戶名和密碼」選項,確定後會出現一個對話框,輸入要自動登錄的賬號和密碼即可。注意,這里不對密碼進行驗證,用戶要確保密碼和賬號的正確性。
2. 下面是某軟體系統用戶登錄流程圖,請根據本圖把整個流程寫成一段話,要求內容完整,表述准確,語言連貫。
本圖是某軟體系統用戶登錄率流程圖,流程圖包括用戶登錄、身份驗證、普通用戶、實驗室管理員和系統管理員,然後介紹這三種用戶進入自己的界面,根據流程圖可以運用恰當的語言概括軟體系統的流程;
參考答案:
示例一:用戶登錄時需要根據用戶級別進行身份驗證;如果驗證未通過,則需要重新選擇用戶級別進行用戶登錄、驗證,驗證通過後系統管理員、實驗室管理員、普通用戶管理員進入各自的用戶登錄界面;
示例二 :用戶登錄時需根據用戶級別進行身份驗證,驗證通過後系統管理員、實驗室管理員、普通用戶分別進入各自登錄界面,如果未通過驗證,則需要重新登錄選擇用戶級別進行用戶登錄、驗證;
3. 用java實現單點登錄和安全驗證系統系統——求思路!!!求大神指點!!!這要怎麼實現
你這樣入手,給你列出整個簡單流程,你自己思考一下:
1)下載,配置 Tomcat。
2)寫 JSP 與 Servlet ,調用 MySQL 或其他資料庫。
3)在 Tomcat 部署你的應用程序。
4)在瀏覽器運行你的應用程序。
一個簡單的測試系統,主要由兩個頁面組成就夠了:
1)登錄頁面。
2)登錄成功後,顯示的主頁面。
後台程序,只要寫一個就行了:
1)接收登錄的用戶名密碼,去查詢資料庫。
4. 如何實現網站登錄的密碼驗證過程
問題1.把用戶用戶名和加密後的密碼存入資料庫,用戶需要驗證時,將用戶輸入的密碼加密,與資料庫中的加密密碼比較。
問題2.md5演算法
具體演算法原理:
對MD5演算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。
在MD5演算法中,首先需要對信息進行填充,使其位長對512求余的結果等於448。因此,信息的位長(Bits Length)將被擴展至N*512+448,N為一個非負整數,N可以是零。填充的方法如下,在信息的後面填充一個1和無數個0,直到滿足上面的條件時才停止用0對信息的填充。然後,在這個結果後面附加一個以64位二進製表示的填充前信息長度。經過這兩步的處理,信息的位長=N*512+448+64=(N+1)*512,即長度恰好是512的整數倍。這樣做的原因是為滿足後面處理中對信息長度的要求。總體流程如下圖所示,
表示第i個分組,每次的運算都由前一輪的128位結果值和第i塊512bit值進行運算。初始的128位值為初試鏈接變數,這些參數用於第一輪的運算,以大端位元組序來表示,他們分別為:A=0x01234567,B=0x89ABCDEF,C=0xFEDCBA98,D=0x76543210。
MD5演算法的整體流程圖[1]
每一分組的演算法流程如下:
第一分組需要將上面四個鏈接變數復制到另外四個變數中:A到a,B到b,C到c,D到d。從第二分組開始的變數為上一分組的運算結果。
主循環有四輪(MD4隻有三輪),每輪循環都很相似。第一輪進行16次操作。每次操作對a、b、c和d中的其中三個作一次非線性函數運算,然後將所得結果加上第四個變數,文本的一個子分組和一個常數。再將所得結果向左環移一個不定的數,並加上a、b、c或d中之一。最後用該結果取代a、b、c或d中之一。
以下是每次操作中用到的四個非線性函數(每輪一個)。
F(X,Y,Z) =(X&Y)|((~X)&Z)
G(X,Y,Z) =(X&Z)|(Y&(~Z))
H(X,Y,Z) =X^Y^Z
I(X,Y,Z)=Y^(X|(~Z))
(&;是與,|是或,~是非,^是異或)
這四個函數的說明:如果X、Y和Z的對應位是獨立和均勻的,那麼結果的每一位也應是獨立和均勻的。
F是一個逐位運算的函數。即,如果X,那麼Y,否則Z。函數H是逐位奇偶操作符。
假設Mj表示消息的第j個子分組(從0到15),常數ti是4294967296*abs(sin(i))的整數部分,i取值從1到64,單位是弧度。(4294967296等於2的32次方)
FF(a,b,c,d,Mj,s,ti)表示 a = b + ((a + F(b,c,d) + Mj + ti) << s)
GG(a,b,c,d,Mj,s,ti)表示 a = b + ((a + G(b,c,d) + Mj + ti) << s)
HH(a,b,c,d,Mj,s,ti)表示 a = b + ((a + H(b,c,d) + Mj + ti) << s)
Ⅱ(a,b,c,d,Mj,s,ti)表示 a = b + ((a + I(b,c,d) + Mj + ti) << s)
這四輪(64步)是:
第一輪
FF(a,b,c,d,M0,7,0xd76aa478)
FF(d,a,b,c,M1,12,0xe8c7b756)
FF(c,d,a,b,M2,17,0x242070db)
FF(b,c,d,a,M3,22,0xc1bdceee)
FF(a,b,c,d,M4,7,0xf57c0faf)
FF(d,a,b,c,M5,12,0x4787c62a)
FF(c,d,a,b,M6,17,0xa8304613)
FF(b,c,d,a,M7,22,0xfd469501)
FF(a,b,c,d,M8,7,0x698098d8)
FF(d,a,b,c,M9,12,0x8b44f7af)
FF(c,d,a,b,M10,17,0xffff5bb1)
FF(b,c,d,a,M11,22,0x895cd7be)
FF(a,b,c,d,M12,7,0x6b901122)
FF(d,a,b,c,M13,12,0xfd987193)
FF(c,d,a,b,M14,17,0xa679438e)
FF(b,c,d,a,M15,22,0x49b40821)
第二輪
GG(a,b,c,d,M1,5,0xf61e2562)
GG(d,a,b,c,M6,9,0xc040b340)
GG(c,d,a,b,M11,14,0x265e5a51)
GG(b,c,d,a,M0,20,0xe9b6c7aa)
GG(a,b,c,d,M5,5,0xd62f105d)
GG(d,a,b,c,M10,9,0x02441453)
GG(c,d,a,b,M15,14,0xd8a1e681)
GG(b,c,d,a,M4,20,0xe7d3fbc8)
GG(a,b,c,d,M9,5,0x21e1cde6)
GG(d,a,b,c,M14,9,0xc33707d6)
GG(c,d,a,b,M3,14,0xf4d50d87)
GG(b,c,d,a,M8,20,0x455a14ed)
GG(a,b,c,d,M13,5,0xa9e3e905)
GG(d,a,b,c,M2,9,0xfcefa3f8)
GG(c,d,a,b,M7,14,0x676f02d9)
GG(b,c,d,a,M12,20,0x8d2a4c8a)
第三輪
HH(a,b,c,d,M5,4,0xfffa3942)
HH(d,a,b,c,M8,11,0x8771f681)
HH(c,d,a,b,M11,16,0x6d9d6122)
HH(b,c,d,a,M14,23,0xfde5380c)
HH(a,b,c,d,M1,4,0xa4beea44)
HH(d,a,b,c,M4,11,0x4bdecfa9)
HH(c,d,a,b,M7,16,0xf6bb4b60)
HH(b,c,d,a,M10,23,0xbebfbc70)
HH(a,b,c,d,M13,4,0x289b7ec6)
HH(d,a,b,c,M0,11,0xeaa127fa)
HH(c,d,a,b,M3,16,0xd4ef3085)
HH(b,c,d,a,M6,23,0x04881d05)
HH(a,b,c,d,M9,4,0xd9d4d039)
HH(d,a,b,c,M12,11,0xe6db99e5)
HH(c,d,a,b,M15,16,0x1fa27cf8)
HH(b,c,d,a,M2,23,0xc4ac5665)
第四輪
Ⅱ(a,b,c,d,M0,6,0xf4292244)
Ⅱ(d,a,b,c,M7,10,0x432aff97)
Ⅱ(c,d,a,b,M14,15,0xab9423a7)
Ⅱ(b,c,d,a,M5,21,0xfc93a039)
Ⅱ(a,b,c,d,M12,6,0x655b59c3)
Ⅱ(d,a,b,c,M3,10,0x8f0ccc92)
Ⅱ(c,d,a,b,M10,15,0xffeff47d)
Ⅱ(b,c,d,a,M1,21,0x85845dd1)
Ⅱ(a,b,c,d,M8,6,0x6fa87e4f)
Ⅱ(d,a,b,c,M15,10,0xfe2ce6e0)
Ⅱ(c,d,a,b,M6,15,0xa3014314)
Ⅱ(b,c,d,a,M13,21,0x4e0811a1)
Ⅱ(a,b,c,d,M4,6,0xf7537e82)
Ⅱ(d,a,b,c,M11,10,0xbd3af235)
Ⅱ(c,d,a,b,M2,15,0x2ad7d2bb)
Ⅱ(b,c,d,a,M9,21,0xeb86d391)
所有這些完成之後,將A、B、C、D分別加上a、b、c、d。然後用下一分組數據繼續運行演算法,最後的輸出是A、B、C和D的級聯。
當你按照我上面所說的方法實現MD5演算法以後,你可以用以下幾個信息對你做出來的程序作一個簡單的測試,看看程序有沒有錯誤。
MD5 ("") =
MD5 ("a") =
MD5 ("abc") =
MD5 ("message digest") =
MD5 ("abcdefghijklmnopqrstuvwxyz") =
MD5 ("") =
5. java實現登陸和注冊驗證,用到多線程!
你說的C/S結構,那麼你會使用socket不??
伺服器的serversocket,每accept()得到一個socket,就啟動一個線程即可。
例如在server中,
ServerSocket server;
/*此處省略初始化等*/
public void handle()throws Eception{
while(true){
Socket socket=server.accept();
new Thread(new HandleThread(socket)).start();
}
}
然後弄個HandleThread的實現Runnable的類
class HandleThread implements Runnable{
private Socket socker;
public HandleThread(Socket s){
socket=s;
}
public void run(){
//在這里寫你要處理的東西即可
}
}
6. 設計方法(演算法)和流程邏輯有什麼區別
流程圖是你整個業務處理步驟,用圖形來表示,
演算法是:你處理一個問題用的方法。
舉例:
一個用戶登錄:
流程圖就是:提交-->驗證 --->成功---。。。
|
|
失敗
演算法:以驗證為例,最簡單的就是對密碼和賬號進行比較,是否相等啊
7. 識別驗證碼的演算法
一、驗證碼的基本知識
1. 驗證碼的主要目的是強制人機交互來抵禦機器自動化攻擊的。
2. 大部分的驗證碼設計者並不得要領,不了解圖像處理,機器視覺,模式識別,人工智慧
的基本概念。
3. 利用驗證碼,可以發財,當然要犯罪:比如招商銀行密碼只有6位,驗證碼形同虛設,計
算機很快就能破解一個有錢的賬戶,很多帳戶是可以網上交易的。
4. 也有設計的比較好的,比如Yahoo,Google,Microsoft等。而國內Tencent的中文驗證
碼雖然難,但算不上好。
二、人工智慧,模式識別,機器視覺,圖像處理的基本知識
1)主要流程:
比如我們要從一副圖片中,識別出驗證碼;比如我們要從一副圖片中,檢測並識別出一張
人臉。 大概有哪些步驟呢?
1.圖像採集:驗證碼呢,就直接通過HTTP抓HTML,然後分析出圖片的url,然後下載保存就
可以了。 如果是人臉檢測識別,一般要通過視屏採集設備,採集回來,通過A/D轉操作,存為
數字圖片或者視頻頻。
2.預處理:檢測是正確的圖像格式,轉換到合適的格式,壓縮,剪切出ROI,去除噪音,灰度
化,轉換色彩空間這些。
3.檢測:車牌檢測識別系統要先找到車牌的大概位置,人臉檢測系統要找出圖片中所有
的人臉(包括疑似人臉);驗證碼識別呢,主要是找出文字所在的主要區域。
4.前處理:人臉檢測和識別,會對人臉在識別前作一些校正,比如面內面外的旋轉,扭曲
等。我這里的驗證碼識別,「一般」要做文字的切割
5.訓練:通過各種模式識別,機器學習演算法,來挑選和訓練合適數量的訓練集。不是訓練
的樣本越多越好。過學習,泛化能力差的問題可能在這里出現。這一步不是必須的,有些識
別演算法是不需要訓練的。
6.識別:輸入待識別的處理後的圖片,轉換成分類器需要的輸入格式,然後通過輸出的類
和置信度,來判斷大概可能是哪個字母。識別本質上就是分類。
2)關鍵概念:
圖像處理:一般指針對數字圖像的某種數學處理。比如投影,鈍化,銳化,細化,邊緣檢測,
二值化,壓縮,各種數據變換等等。
1.二值化:一般圖片都是彩色的,按照逼真程度,可能很多級別。為了降低計算復雜度,
方便後續的處理,如果在不損失關鍵信息的情況下,能將圖片處理成黑白兩種顏色,那就最好
不過了。
2.細化:找出圖像的骨架,圖像線條可能是很寬的,通過細化將寬度將為1,某些地方可能
大於1。不同的細化演算法,可能有不同的差異,比如是否更靠近線條中間,比如是否保持聯通
行等。
3.邊緣檢測:主要是理解邊緣的概念。邊緣實際上是圖像中圖像像素屬性變化劇烈的地
方。可能通過一個固定的門限值來判斷,也可能是自適應的。門限可能是圖像全局的,也可
能是局部的。不能說那個就一定好,不過大部分時候,自適應的局部的門限可能要好點。被
分析的,可能是顏色,也可能是灰度圖像的灰度。
機器視覺:利用計算機來模式實現人的視覺。 比如物體檢測,定位,識別。按照對圖像
理解的層次的差別,分高階和低階的理解。
模式識別:對事物或者現象的某種表示方式(數值,文字,我們這里主要想說的是數值),
通過一些處理和分析,來描述,歸類,理解,解釋這些事物,現象及其某種抽象。
人工智慧:這種概念比較寬,上面這些都屬於人工智慧這個大的方向。簡單點不要過分
學院派的理解就是,把人類的很「智能」的東西給模擬出來協助生物的人來處理問題,特別是
在計算機裡面。
8. shiro做無狀態的token驗證登錄,整體流程是怎麼樣的
得帶key走。
推薦一套完整的Shiro Demo,免費的。
Shiro介紹文檔:http://www.sojson.com/shiro
Demo已經部署到線上,地址是http://shiro.itboy.net,
管理員帳號:admin,密碼:sojson.com 如果密碼錯誤,請用sojson。
PS:你可以注冊自己的帳號,然後用管理員賦許可權給你自己的帳號,但是,每20分鍾會把數據初始化一次。建議自己下載源碼,讓Demo跑起來,然後跑的更快。