




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)三實(shí)現(xiàn)口令認(rèn)證實(shí)驗(yàn)概述身份認(rèn)證(EntityAuthentication)也稱為實(shí)體鑒別,目的是證實(shí)一個(gè)實(shí)體就是所聲稱的實(shí)體。計(jì)算機(jī)系統(tǒng)中,對(duì)各種計(jì)算資源(如文件、數(shù)據(jù)庫(kù)、應(yīng)用系統(tǒng))機(jī)密性和完整性的保護(hù),其本質(zhì)是防止用戶對(duì)系統(tǒng)進(jìn)行非授權(quán)的訪問(wèn)。在處理授權(quán)問(wèn)題之前,首先需要確認(rèn)用戶的身份。身份認(rèn)證通常是系統(tǒng)安全保護(hù)的第一道防線,是訪問(wèn)控制和責(zé)任追究的基礎(chǔ);認(rèn)證的失敗可能導(dǎo)致整個(gè)系統(tǒng)的失敗。這里涉及三個(gè)概念:認(rèn)證、授權(quán)及審計(jì)。(1)認(rèn)證:對(duì)用戶身份的證實(shí)。認(rèn)證能防止攻擊者假冒合法用戶獲取訪問(wèn)權(quán)限。(2)授權(quán):當(dāng)用戶身份被證實(shí)后,賦予該用戶進(jìn)行資源訪問(wèn)的權(quán)限。(3)審計(jì):每一個(gè)用戶都應(yīng)該為自己所做的操作負(fù)責(zé),所以在每個(gè)操作后都要留下記錄,以便事后核查。身份認(rèn)證分為單向認(rèn)證和相互認(rèn)證。如果通信的雙方只需要一方(聲稱方)被另一方(驗(yàn)證方)鑒別身份,這樣的認(rèn)證過(guò)程是單向認(rèn)證。在相互認(rèn)證過(guò)程中,通信雙方需要互相認(rèn)證對(duì)方的身份。用戶的身份認(rèn)證過(guò)程通常采用三類憑證驗(yàn)證實(shí)體身份:用戶所知道的信息(如口令、密鑰或記憶的圖形、圖像等),用戶持有的物品(如令牌、智能卡或USBKey等),用戶獨(dú)一無(wú)二的特征或能力(如指紋、聲音、視網(wǎng)膜血管分布圖或簽字等)。對(duì)主機(jī)的認(rèn)證通常可以根據(jù)地理位置、IP地址或者硬件地址(MAC地址)、時(shí)間、特定場(chǎng)所等作為認(rèn)證依據(jù)。每一種認(rèn)證方法都存在一些問(wèn)題,如對(duì)口令的認(rèn)證,敵手可猜測(cè)、竊取口令;對(duì)用戶持有的令牌的認(rèn)證,敵手可以盜取令牌,用戶也可能丟失令牌;至于使用生物特征進(jìn)行認(rèn)證,也存在誤報(bào)和漏報(bào)、擾動(dòng)攻擊、用戶的認(rèn)可程度、使用成本和易用性等問(wèn)題。因此,為提高認(rèn)證系統(tǒng)的強(qiáng)度,可以使用多個(gè)因子的認(rèn)證方式,如口令加智能卡,這種認(rèn)證方式稱為多因子認(rèn)證。此次課外實(shí)踐將在熟悉認(rèn)證概念的基礎(chǔ)下,使用高級(jí)語(yǔ)言實(shí)現(xiàn)基于用戶名口令的登錄程序。實(shí)驗(yàn)內(nèi)容技術(shù)說(shuō)明此次課外實(shí)踐設(shè)計(jì)的登錄、注冊(cè)程序采用B/S架構(gòu)與SSM框架,具有較高的穩(wěn)定性與可復(fù)用性,前端頁(yè)面引入LayUI框架簡(jiǎn)化開發(fā)。程序代碼注冊(cè)Controller-控制層
@PostMapping("/doRegister")
@ResponseBody
public
ReturnJson
doRegister(@RequestBody
User
user)
{
try
{
if
(userService.isUsernameExsit(user.getUsername()))
{
return
new
ReturnJson(2,
"用戶已存在!",
0,
"");
}
if
("男".equals(user.getGender()))
{
user.setAvatar("http://my.image.bed/avatar-boy.png");
}
if
("女".equals(user.getGender()))
{
user.setAvatar("http://my.image.bed/avatar-girl.png");
}
userService.register(user);
return
new
ReturnJson(0,
"注冊(cè)成功",
0,
"");
}
catch
(Exception
e)
{
return
new
ReturnJson(1,
"注冊(cè)失敗",
0,
"");
}
}Service-業(yè)務(wù)層
@Override
public
void
register(User
user)
{
user.setPassword(PasswordUtil.bryptPwd(user.getPassword()));
userMapper.insert(user);
}
@Override
public
Boolean
isUsernameExsit(String
username)
{
return
userMapper.selectByUsername(username)
!=
null;
}Mapper-數(shù)據(jù)持久層
<select
id="selectByUsername"
resultType="com.zyl.User">
select
*
from
user
where
username
=
#{username}
</select>
<insert
id="insert"
useGeneratedKeys="true"
keyProperty="id>
insert
into
user(username,password,gender,avatar)
values
(#{username},#{password},#{gender},#{avatar})
</insert>前端JS(不包含靜態(tài)Html頁(yè)面)<script
src="/static/res/layui/layui.js"></script><script>layui.cache.page
=
'user';layui.config({
version:
"3.0.0"
,base:
'/static/res/mods/'}).extend({
fly:
'index'}).use('fly');layui.use(['form',
'jquery'],
function
()
{
var
form
=
layui.form;
var
$
=
layui.jquery;
form.verify({
username:
function
(value,
item)
{
var
Digital
=
/\d/;
var
Letters
=
/[a-zA-Z]/;
if
(!(Digital.test(value)
&&
!Letters.test(value)
&&
value.length
==
11))
{
return
'學(xué)號(hào)只能為11位數(shù)字!';
}
},
nickname:
function
(value)
{
if
(value.length
<
2)
{
return
"昵稱至少輸入2個(gè)字符!";
}
},
pwd:
function
(value,
item)
{
var
Digital
=
/\d/;
var
Letters
=
/[a-zA-Z]/;
if
(!(Digital.test(value)
&&
Letters.test(value)
&&
value.length
>=
0))
{
return
'密碼必須含有字母和數(shù)字!';
}
},
rePwd:
function
(value,
item)
{
var
pwd
=
$("input[name='password']").val();
if
(pwd
!=
value)
{
return
'密碼與確認(rèn)密碼不一致!';
}
}
});
//監(jiān)聽提交
form.on('submit(reg)',
function
(data)
{
$.ajax({
url:
'/doRegister'
,
type:
'post'
,
contentType:
"application/json"
,
data:
JSON.stringify(data.field)
,
success:
function
(result)
{
if
(result.code
==
0)
{
layer.msg('注冊(cè)成功',
{
time:
2000,
end:
function
()
{
location.href
=
'/login'
}
});
}
else
{
layer.msg(result.msg,
{
time:
1000
});
parent.layer.close();
}
}
});
return
false;
});
$(".oauth
.layui-icon-home").click(function
()
{
window.location.href
=
"/index"
});});</script></body></html>登錄Controller-控制層
@PostMapping("/doLogin")
@ResponseBody
public
ReturnJson
doLogin(HttpServletRequest
request,
@RequestBody
User
user)
{
User
newUser
=
userService.loginCheck(user);
if
(newUser
!=
null)
{
request.getSession().setAttribute("user",
newUser);
if
("管理員".equals(newUser.getType()))
{
request.getSession().setAttribute("adminUser",
newUser);
}
request.getSession().setMaxInactiveInterval(1800);
return
new
ReturnJson(0,
"登錄成功",
0,
"");
}
else
{
return
new
ReturnJson(1,
"用戶名或密碼錯(cuò)誤",
0,
"");
}
}Service-服務(wù)層
@Override
public
User
loginCheck(User
user)
{
User
tmpUser
=
userMapper.selectByUsername(user.getUsername());
boolean
isLogin
=
PasswordUtil.validPwd(user.getPassword(),
tmpUser.getPassword());
if
(isLogin)
{
return
tmpUser;
}
else
{
return
null;
}
}Mapper-數(shù)據(jù)持久層
<select
id="selectByUsername"
resultType="com.zyl.User">
select
*
from
user
where
username
=
#{username}
</select>前端JS(不包含靜態(tài)Html頁(yè)面)<script
src="/static/res/layui/layui.js"></script><script>
layui.config({
version:
"3.0.0"
,
base:
'/static/res/mods/'
}).extend({
fly:
'index'
}).use('fly');
layui.use(['form',
'jquery'],
function
()
{
var
form
=
layui.form;
var
$
=
layui.jquery;
//監(jiān)聽提交
form.on('submit(login)',
function
(data)
{
$.ajax({
url:
'/doLogin'
,
type:
'post'
,
contentType:
"application/json"
,
data:
JSON.stringify(data.field)
,
success:
function
(result)
{
if
(result.msg
==
'登錄成功')
{
layer.msg('登錄成功',
{
time:
2000,
end:
function
()
{
location.href
=
'/index'
}
});
}
else
{
layer.msg(result.msg,
{
time:
1000
});
var
index
=
parent.layer.getFrameIndex();
parent.layer.close();
}
}
});
return
false;
});
});</script></body></html>密碼加密工具類publicclassPasswordUtil{
/**加密密碼*/
publicstaticStringbryptPwd(Stringpwd){
returnBCrypt.hashpw(pwd,BCrypt.gensalt());
}
/**校驗(yàn)密碼*/
publicstaticbooleanvalidPwd(Stringpwd,Stringhashed){
try{
returnBCrypt.checkpw(pwd,hashed);
}catch(Exceptione){
e.printStackTrace();
returnfalse;
}
}}運(yùn)行截圖注冊(cè)頁(yè)登錄頁(yè)實(shí)驗(yàn)心得通過(guò)此次課外實(shí)踐,讓我意識(shí)到信息安全的重要性,此次實(shí)驗(yàn)所設(shè)計(jì)的注冊(cè)、登錄程序是基于文本口令實(shí)現(xiàn)身份認(rèn)證的,基于口令的認(rèn)證方式是較常用的一種技術(shù)。在最初階段,用戶首先在系統(tǒng)中注冊(cè)自己的用戶名和登錄口令,系統(tǒng)將用戶名和口令存儲(chǔ)在內(nèi)部數(shù)據(jù)庫(kù)中,這個(gè)口令一般是長(zhǎng)期有效的,因此也稱為靜態(tài)口令。基于靜態(tài)口令的身份認(rèn)證技術(shù)因其簡(jiǎn)單和低成本而得到了廣泛的使用。但這種方式存在嚴(yán)重的安全問(wèn)題,安全性僅依賴于口令,口令一旦泄露,用戶就可能被假冒。簡(jiǎn)單的口令很容易遭受到字典攻擊、窮舉攻擊甚至暴力計(jì)算破解。另外,這種不科
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒店客房培訓(xùn)
- 2025合同范本:商鋪?zhàn)赓U合同協(xié)議書
- 2025年版權(quán)保留轉(zhuǎn)讓合同
- 護(hù)理培訓(xùn)成果匯報(bào)
- 2025商業(yè)店鋪?zhàn)赓U合同范本2
- 2025租賃合同的擔(dān)保方式
- 2025網(wǎng)約車租賃服務(wù)合同
- 2025勞動(dòng)合同范本標(biāo)準(zhǔn)模板
- 2025標(biāo)準(zhǔn)設(shè)備購(gòu)買合同參考范本
- 2025合作伙伴合同書 企業(yè)合作伙伴合同撰寫
- 企業(yè)重組相關(guān)稅收政策培訓(xùn)教學(xué)課件(38張)
- midas NFX使用指南(八)
- 肝癌的防治(大眾科普版本)-PPT課件
- 成都高新區(qū)小學(xué)數(shù)學(xué)五年級(jí)下冊(cè)半期考試數(shù)學(xué)試卷
- 職業(yè)危害防治實(shí)施管理臺(tái)賬
- 2018年人教版九年級(jí)英語(yǔ)單詞表
- 畢業(yè)設(shè)計(jì)U型管換熱器設(shè)計(jì)說(shuō)明書
- 蘋果中國(guó)授權(quán)經(jīng)銷商協(xié)議
- KGW船用起重機(jī)維護(hù)使用手冊(cè)
- 怎樣確保騎車安全-1
- 混凝土裂縫修補(bǔ)工程驗(yàn)收記錄表
評(píng)論
0/150
提交評(píng)論