為什麼要做iPassword
很多人第一眼看iPassword
以為是1Password
,其實靈感確實是來自1Password,但是還是有區別的。1Password資料是儲存在服務端,iPassword的資料是儲存在本地;1Password試用完需要收費,iPassword完全開源並且免費;1Password功能全而且強大,iPassword功能比較簡單單一。出於學習以及“窮”的目的開發了這款軟體。
iPassword提供哪些功能
廢話不多說,我們直接上圖
- 首先是使用者只需要記住一個密碼,這點跟1Password一致,通過一個密碼管理多個密碼
- 支援Chrome匯出的csv格式檔案匯入,這樣儲存在chrome上的密碼就可以直接匯入到iPassword了,但是有個問題就是csv格式裡的name欄位還是要自己編輯下的,不然名稱顯示非常的亂
- 支援搜尋功能,簡單做了下匹配
- 自動獲取Logo,先去頁面上看有沒有Logo,沒有再根據名字查詢相應App的Logo
- PC端資料同步到手機端,手機端通過掃碼PC端提供得二維碼同步密碼資料
說下技術實現
- PC端採用
Electron + React + Webpack
架構 - 無線端採用
React-Native
架構
加密方案
說下加密方案,主要是使用SHA256
(雜湊加密)和AES
(對稱加密),MD5太容易破解了果斷放棄
- SHA256加密類似於MD5加密,屬於不可逆加密,舉個栗子:
123
通過SHA256加密可以得到A665A45920422F9D417E4867EFDC4FB8A04A1F3FFF1FA07E998E86F7F7A27AE3
,但是A665A45920422F9D417E4867EFDC4FB8A04A1F3FFF1FA07E998E86F7F7A27AE3
按理來說是無法解密得到123
,所以很多伺服器上都不會把使用者密碼明文儲存到資料庫上,怕資料庫管理員偷看到,都會通過類似的雜湊加密,這樣使用者登入的時候只要驗證使用者輸入密碼的雜湊值與伺服器上儲存的雜湊值是否一致就可以了 AES
對稱加密就很好理解了,就是加密解密都用同一把金鑰。你開門關門都用同一把鑰匙吧
然後我們來說下iPassword的加密方案。首先使用者首次登陸的時候會要求輸入一個密碼keypassword作為主密碼,並把keypassword的SHA256加密過後的密碼儲存到localStorage
,後面使用者登入的時候,只要驗證使用者輸入的主密碼的SHA256加密值跟localStorage
裡面儲存的keypassword加密值是否一致,就能知道使用者輸入的主密碼是否是正確,然後會把使用者輸入的正確的明文密碼儲存在SessionStorage
裡面,SessionStorage
裡面的儲存的資料會在使用者關閉應用的時候清空
當使用者新增一條密碼的時候,密碼會被AES對稱加密,金鑰就是使用者的keypassword,這樣就做到使用者只需記住一個密碼,其他密碼都通過這個密碼加密儲存到使用者自己的電腦上
無線端方案
再說下無線端的方案,無線端功能有所限制,無法新增密碼,所有密碼資料都來自PC端
首先我們PC已經新增了多條密碼,在PC端已經有加密過後的密碼列表了,然後在PC端起一個WEB服務可以讀取這些加密的密碼,把地址生成一個二維碼,無線端掃碼就能同步到資料
開源地址
更多細節就自己看程式碼吧,反正都開源了,這塊不是一個非常嚴格的密碼管理工具,但是對於平時的一些密碼的管理夠用了,如果大家有更好的技術方案,歡迎跟我交流學習