張亞娟,韓銀雪,劉效洋
(黃河科技學(xué)院 信息工程學(xué)院,河南 鄭州 450063)
隨著大量的便捷網(wǎng)站和APP的應(yīng)用[1],需要不斷地注冊(cè)賬戶。然而隨著某些軟件長(zhǎng)時(shí)間不用,就會(huì)忘記一些賬戶信息,尤其是用戶名和密碼。但是記錄在本子或電腦上,又是十分不安全而且容易丟失的。所以,有個(gè)能保證用戶賬戶信息安全的移動(dòng)應(yīng)用來(lái)幫用戶隨時(shí)隨地管理這些個(gè)人賬戶是必須的。
隨著計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展,賬戶密碼管理方式主要有以下幾種。
將用戶的賬戶信息記錄到類似于記事本的文本工具和word文檔中的方式[2]最為簡(jiǎn)單。這種方式雖然簡(jiǎn)單,但數(shù)據(jù)安全性特別差是最大的缺點(diǎn),它幾乎是將用戶的賬戶信息直接保存在里面,沒(méi)有一點(diǎn)安全措施。這些文件一旦丟失,用戶的賬戶信息就有被泄露的風(fēng)險(xiǎn)。
如今自動(dòng)保存密碼功能[3]幾乎已經(jīng)被各大瀏覽器實(shí)現(xiàn)。當(dāng)人們第一次瀏覽和登錄一些網(wǎng)站的時(shí)候,用戶的賬戶和登錄密碼就會(huì)被瀏覽器保存;當(dāng)用戶再一次瀏覽登錄這些網(wǎng)頁(yè)時(shí),瀏覽器將會(huì)自動(dòng)給出相關(guān)的登錄信息,這樣就不需要再自己填寫賬戶名和密碼[4],用戶就可以很方便地管理和使用賬戶信息。然則,如果有黑客惡意攻擊用戶的計(jì)算機(jī),就可以獲得用戶的所有賬戶信息[5-6]。所以,使用者信息泄露的風(fēng)險(xiǎn)也存在于這種管理方式中。
在線用戶密碼管理工具采用的是在云端服務(wù)器里面儲(chǔ)存用戶的賬戶信息[7]?,F(xiàn)在,LastPass是國(guó)內(nèi)外應(yīng)用最為廣泛的在線用戶賬號(hào)密碼管理工具[8]。雖然在很多地方比瀏覽器有了很大的進(jìn)步,但是它同樣也有安全方面的隱患。假如有人惡意攻擊他的服務(wù)器,或者盜取人們用戶的LastPass密碼,那么就泄漏了用戶的賬戶信息。因此,用戶信息泄漏的危險(xiǎn)也容易發(fā)生在LastPass中。
本地化用戶密碼管理基本解決了在線管理的安全方面的問(wèn)題,其中最受歡迎的無(wú)疑就是KeePass[9-10]。在將賬戶信息保存到數(shù)據(jù)庫(kù)之前,先用加密類算法對(duì)其加密,通過(guò)移動(dòng)端和電腦端本地?cái)?shù)據(jù)庫(kù)儲(chǔ)存用戶的賬戶信息。這樣的話,不管是用戶的電腦被攻擊,還是有人偷了用戶的電腦,他們看到的賬戶信息也是經(jīng)過(guò)加密的。然而這種管理工具就只能夠在用戶的某一臺(tái)電腦或移動(dòng)端上,非常不便于用戶使用[11]。
針對(duì)已有的賬戶密碼管理系統(tǒng)存在的各類弊端和安全問(wèn)題,文中設(shè)計(jì)了基于安卓平臺(tái)的賬號(hào)密碼管理APP。它能夠幫助用戶存儲(chǔ)有關(guān)登錄網(wǎng)站、應(yīng)用軟件和銀行的應(yīng)用程序的賬戶名和密碼,與此同時(shí),用戶還對(duì)賬戶信息分組進(jìn)行管理,將相應(yīng)的賬戶信息存放到相應(yīng)的分組中,因此不需要用戶記住那么多的賬戶信息,也不用再手動(dòng)記錄繁雜的賬戶登錄信息。
RS[12]是一種分組加密算法。最開(kāi)始出現(xiàn)的是RS4,由于它只是對(duì)數(shù)據(jù)進(jìn)行了加、異或和循環(huán)這些最基礎(chǔ)的操作,非常容易實(shí)現(xiàn),所以安全性不是很高。因此在這之后,它的設(shè)計(jì)者又提出了RS5,相比RS4來(lái)說(shuō),安全性有所提高。就現(xiàn)在來(lái)看,RS5還算安全,并且容易實(shí)現(xiàn),所以有時(shí)會(huì)有人把它用在傳感器等設(shè)備上。但在編碼時(shí)計(jì)算復(fù)雜度比較大,需要的存儲(chǔ)空間會(huì)增加[13],不太適合用在手機(jī)端。
MD5是一種不可逆的單向加密算法[14],不管多長(zhǎng)的數(shù)據(jù),經(jīng)過(guò)MD5轉(zhuǎn)換出來(lái)的值都是一樣長(zhǎng)的。另一方面,MD5的計(jì)算方法簡(jiǎn)單,給定一個(gè)字符串,很容易就能計(jì)算出它的MD5值,但是把一個(gè)MD5值轉(zhuǎn)換回原來(lái)的數(shù)字卻十分困難?,F(xiàn)在MD5算法一般用作數(shù)字簽名、安全訪問(wèn)驗(yàn)證和一致性驗(yàn)證等方面。雖然MD5算法本身是不可逆的,但是這并不表示它不能被人破解?,F(xiàn)在網(wǎng)絡(luò)上就有很多破解MD5密碼的機(jī)制,所以總的來(lái)說(shuō),它的安全性還是不夠高。
相比于DES算法,AES算法的加解密速度更快,安全級(jí)別更高,并且可以抵抗當(dāng)前所有的攻擊方法[15]。AES是一種分組密碼[16]。顧名思義,就是把明文分成幾組,每一組的長(zhǎng)度都一樣,依次對(duì)每組進(jìn)行加密,直到結(jié)束。在AES標(biāo)準(zhǔn)規(guī)范中,分組的長(zhǎng)度只可為128位,也就是說(shuō),每組必須是16個(gè)字節(jié)(每8位一個(gè)字節(jié))。
總之,AES加密算法不僅靈活性好,而且具有安全性高、效率高、容易實(shí)現(xiàn)等優(yōu)點(diǎn)[17]。在這個(gè)系統(tǒng)里面,用戶所有的密碼信息都是先經(jīng)過(guò)加密處理才存儲(chǔ)到數(shù)據(jù)庫(kù)中的,如圖1所示。這樣就可以保證在數(shù)據(jù)庫(kù)中也看不到用戶的密碼信息,從而使系統(tǒng)的安全性更好。
圖1 密碼加密存儲(chǔ)
這款A(yù)PP包括注冊(cè)、登錄、修改密碼、分組管理、賬戶管理、搜索賬號(hào)等功能。分組管理是對(duì)分組的添加、修改、設(shè)置以及組內(nèi)賬戶的管理,賬戶管理方面主要包括賬戶信息的增刪改查,賬戶搜索是根據(jù)用戶賬戶信息中的賬戶標(biāo)題或者賬號(hào)為關(guān)鍵字進(jìn)行搜索。模塊結(jié)構(gòu)如圖2所示。
圖2 模塊結(jié)構(gòu)
如果是新用戶,還沒(méi)有賬戶,就可以點(diǎn)擊登陸界面的“注冊(cè)新用戶”按鈕,進(jìn)入注冊(cè)界面。首先,用戶需要輸入賬戶名和密碼,然后再次確認(rèn)密碼后,點(diǎn)擊注冊(cè)按鈕,這時(shí)用戶名、用戶密碼和確認(rèn)密碼的內(nèi)容都會(huì)被系統(tǒng)獲取。只有當(dāng)兩次密碼相同時(shí),系統(tǒng)才會(huì)對(duì)用戶的密碼進(jìn)行AES加密,然后把用戶新注冊(cè)的賬戶信息保存到數(shù)據(jù)庫(kù)里面的用戶表中去。當(dāng)用戶注冊(cè)成功以后,系統(tǒng)將會(huì)自動(dòng)跳轉(zhuǎn)回登錄頁(yè)面進(jìn)行登錄。
在創(chuàng)建登錄界面之前需要做一些準(zhǔn)備工作,主要是如何美化登錄界面并準(zhǔn)備好美化登錄界面時(shí)所需要的圖片,對(duì)登錄界面進(jìn)行美化。
登錄界面布局完成后,就是實(shí)現(xiàn)登錄功能:打開(kāi)應(yīng)用,應(yīng)用程序會(huì)先判斷當(dāng)前用戶有沒(méi)有登陸,如果用戶已經(jīng)登錄,會(huì)直接進(jìn)入賬號(hào)管理界面。當(dāng)用戶還沒(méi)有登陸的時(shí)候,程序會(huì)給出登陸界面,此時(shí)用戶需要在登錄頁(yè)面中填寫自己的賬號(hào)和密碼,然后點(diǎn)擊登錄按鈕。當(dāng)用戶點(diǎn)擊登陸按鈕的時(shí)候,系統(tǒng)就會(huì)自動(dòng)判斷用戶名和密碼是否為空,只要用戶未填寫其中的一個(gè)信息,系統(tǒng)就會(huì)提醒用戶名或密碼不能為空。只有用戶將兩個(gè)信息都填寫完整,即用戶名和密碼都不為空的時(shí)候,系統(tǒng)才會(huì)獲取用戶的賬戶名和密碼。由于這個(gè)系統(tǒng)中使用的是本地?cái)?shù)據(jù)庫(kù),所以需要系統(tǒng)根據(jù)用戶名在user表中查詢?cè)撡~戶是否存在。如果存在,就查找對(duì)應(yīng)的密碼是否存在,如果存在對(duì)應(yīng)的密碼,并且與用戶輸入的密碼相同,就登錄成功,并跳轉(zhuǎn)到賬號(hào)管理界面,如圖3所示。
圖3 用戶登錄界面
分組管理的實(shí)現(xiàn),主要是在Fragment中應(yīng)用ExpandListview父元素與子元素的長(zhǎng)按事件和其中的點(diǎn)擊事件。主要步驟包括兩步:第一步,F(xiàn)ragment里面把Listview顯示出來(lái)。創(chuàng)建一個(gè)Listview,里面是每一個(gè)items的樣式;然后運(yùn)用ListFragment這個(gè)類將Listview在Fragment里面顯示出來(lái)。ListView內(nèi)置在ListFragment里面,ListFragment會(huì)自動(dòng)進(jìn)行 ListView的全屏布局。新建一個(gè)類繼承ListFragment之后,把Fragment托管到Activity里面。
第二步是將ListView顯示在Activity里面。由于ListView沒(méi)有放在Activity里面,因此必須把ListView控件添加到Activity布局里面,同時(shí)在Activity里面得到ListView實(shí)例,然后創(chuàng)建適配器把ListView跟數(shù)據(jù)連接到一起。這個(gè)步驟在Activity中和上一步的Fragment很像,可以參考上一步完成。具體實(shí)現(xiàn)效果如圖4和圖5所示。
圖4 分組信息界面
圖5 分組管理界面
這個(gè)模塊的主要功能是根據(jù)用戶在搜索框里面填寫的關(guān)鍵字,在下方實(shí)時(shí)地顯示信息,其實(shí)就是ListView按照EditText搜索框中的關(guān)鍵字實(shí)時(shí)地把搜索到的賬戶信息展現(xiàn)出來(lái)。所有功能的實(shí)現(xiàn)主要包括四個(gè)步驟:首先,建立一個(gè)布局,在其中放置一個(gè)搜索文本框和一個(gè)ListView。然后,創(chuàng)建一個(gè)mData數(shù)據(jù)集,用來(lái)創(chuàng)建列表視圖的適配器。因?yàn)樵谒阉骺騼?nèi)容發(fā)生改變時(shí),mData的數(shù)據(jù)隨之變化,所以這里必須有更新操作。
因?yàn)橐獎(jiǎng)討B(tài)改變ListView的顯示,所以就必須要有EditText的內(nèi)容改變的監(jiān)聽(tīng)器。當(dāng)察覺(jué)到搜索框內(nèi)容發(fā)生變化時(shí),就用Handler post一個(gè)Runnable做對(duì)應(yīng)的改動(dòng)。
最后,需要?jiǎng)討B(tài)更新ListView,這是最重要的一步。這一步需要根據(jù)搜索框的內(nèi)容在元數(shù)據(jù)里面查找相符的賬戶信息,再讓它在ListView里面顯示出來(lái)。adapter有一個(gè)notifyDataSetChanged()方法,這個(gè)方法可以在更新數(shù)據(jù)的時(shí)候更新綁定的ListView。因?yàn)榈谝粋€(gè)就是搜索框,所以一旦開(kāi)始運(yùn)行程序,搜索會(huì)自動(dòng)獲取焦點(diǎn)。具體效果如圖6所示。
修改密碼模塊中,主要實(shí)現(xiàn)的功能是對(duì)密碼的修改。首先用戶要輸入自己的舊密碼,以保證在進(jìn)行修改密碼操作的是用戶本人,然后輸入新密碼并對(duì)新密碼進(jìn)行確認(rèn),最后提交信息。所以在這個(gè)頁(yè)面布局分為兩部分,即三個(gè)文本框和一個(gè)提交按鈕。
圖6 動(dòng)態(tài)搜索界面
首先創(chuàng)建一個(gè)Layout,里面放三個(gè)Textview,分別是舊密碼,新密碼和確認(rèn)密碼。然后再放一個(gè)button,就是確認(rèn)按鈕,用于填寫完密碼修改信息后進(jìn)行提交。布局完成后需要在ChangePwdActivity中進(jìn)行行為設(shè)置。在每個(gè)EditText中都需要有相應(yīng)的提示信息。當(dāng)某個(gè)輸入框的信息還沒(méi)有填寫進(jìn)確認(rèn)提交的時(shí)候,會(huì)給出相應(yīng)的提示,然后通過(guò)et.requestFocus()方法讓焦點(diǎn)出現(xiàn)在相應(yīng)的EditText上。當(dāng)用戶提交信息的時(shí)候,程序會(huì)在數(shù)據(jù)庫(kù)中進(jìn)行查詢,判斷舊密碼是不是正確。舊密碼錯(cuò)誤或新舊密碼不一致都會(huì)給出相應(yīng)的提示語(yǔ)句。
使用Android Studio進(jìn)行開(kāi)發(fā),運(yùn)用Android數(shù)據(jù)庫(kù)框架LitePal,以及ExpandListView控件等,還有夜神模擬器進(jìn)行模擬,主要實(shí)現(xiàn)了賬號(hào)注冊(cè)和用戶登錄、分組管理、賬戶管理、賬戶搜索等功能。詳細(xì)內(nèi)容包括分組的添加、修改、加密管理、錯(cuò)誤提示、賬戶的信息管理和根據(jù)賬戶標(biāo)題進(jìn)行搜索等。
這款賬號(hào)密碼管理APP,主要的優(yōu)點(diǎn)包括兩方面:一方面是對(duì)賬戶進(jìn)行了分組管理功能,方便用戶管理和查找賬戶信息;另一方面是對(duì)分組進(jìn)行加密設(shè)置,對(duì)賬戶信息進(jìn)行雙重保護(hù),提高了用戶信息的安全性,用戶可以更加方便和放心地使用它對(duì)重要的賬戶信息進(jìn)行管理。不足的是,這個(gè)項(xiàng)目采用本地存儲(chǔ)的方式,雖然增加了賬號(hào)密碼的安全性,但是一旦用戶的移動(dòng)設(shè)備丟失,賬戶信息也將丟失。下一步將考慮在APP中設(shè)置信息定時(shí)導(dǎo)出PC機(jī)功能,方便用戶移動(dòng)設(shè)備的更換。