iOS 注冊(cè)密碼加密 添加了時(shí)間戳 遇到的問(wèn)題...
今天項(xiàng)目 遇到一個(gè)事故,我本想用 一個(gè)形容這個(gè)事故的adj 算了 既然 叫事故 已經(jīng)能表達(dá)我們處于的一種狀態(tài),
是這樣的: 有小部分用戶反應(yīng) app無(wú)法注冊(cè) 總提示密碼錯(cuò)誤的情況 實(shí)際 該步驟 已經(jīng)通過(guò)了本地校驗(yàn)密碼的步驟.此時(shí)的密碼錯(cuò)誤反饋 是服務(wù)端返回的?
于是我們判斷 密碼解碼 出了問(wèn)題.
對(duì)于密碼加密規(guī)則 真的是每個(gè)公司都有一套 很靈活. 我們由于是翻新版本 也出了新的一套密碼加密規(guī)則,
如下:
登錄加密方式
md5(md5(password))
這個(gè)登錄加密比較好理解,針對(duì)原始密碼 二次md5, 此時(shí)服務(wù)端在注冊(cè)時(shí)候已經(jīng)知道你的密碼 也進(jìn)行二次md5 再和你上傳的password加密結(jié)果進(jìn)行比較 即可
注冊(cè)加密方式:
幾個(gè)參數(shù):
appKey :服務(wù)端提供的key,放在app本地。用于參與下面的加密
time : 獲得當(dāng)前時(shí)間戳并保留變量,用于上傳給服務(wù)端 (秒級(jí)別)
date: 將時(shí)間戳轉(zhuǎn)為 “分:秒:時(shí) 日-月-年” 格式
password1: 截取用戶輸入密碼的前m位,再進(jìn)行字符串反轉(zhuǎn)操作
password2: 用戶輸入密碼的剩余字符,再進(jìn)行字符串反轉(zhuǎn)操作
code : md5(AppKey+date);
最終公式如下
passwrod=反轉(zhuǎn)字符串(base64_encode (code+password1+code+password2+code))
NOTE: time 時(shí)間戳需要一起上傳給服務(wù)端
其實(shí) 這里的關(guān)鍵問(wèn)題 就是對(duì) time 和 date的理解,
服務(wù)端希望加密結(jié)果是動(dòng)態(tài)的,所以引入時(shí)間戳加密
然后通過(guò)上傳的time 服務(wù)端再把結(jié)果反解密 得到原始密碼
其實(shí) 說(shuō)到這里 我們大家就都知道 為什么 用戶反饋說(shuō)無(wú)法注冊(cè)了———服務(wù)端沒(méi)有解密出原始密碼!!!!
關(guān)鍵就是這個(gè)時(shí)間戳 出現(xiàn)了嚴(yán)重的問(wèn)題.
設(shè)計(jì)該套加密過(guò)程,我們 前端和后端沒(méi)有約定 這個(gè)時(shí)間戳到底以什么時(shí)區(qū)為標(biāo)準(zhǔn)!!! 客戶端默認(rèn) 是用戶當(dāng)?shù)貢r(shí)區(qū)處理的
服務(wù)端解密 時(shí)候 把時(shí)間戳 按北京時(shí)區(qū)處理了,
恰巧 我們的確存在部分海外用戶, 注冊(cè)或者 重新找回密碼 直接就失敗了.
其實(shí)解決很簡(jiǎn)單
方法我們選擇兩種
(1)前端后端統(tǒng)一時(shí)區(qū)
(2)前端不動(dòng) 后端要對(duì) 第一次解密過(guò)程判斷 如果沒(méi)有得到密碼結(jié)果 要遍歷其他時(shí)區(qū)繼續(xù)解密 至解密成功
當(dāng)前,為了App Store 用戶即可用 我們采用了方法(2)
在接下來(lái)的迭代,遵循設(shè)計(jì)規(guī)則(1)
因?yàn)檫@個(gè)問(wèn)題是在臨近結(jié)束當(dāng)前開(kāi)發(fā)任務(wù)發(fā)現(xiàn)的么,我這邊的個(gè)人想法是:
posted on 2017-03-06 15:10 ACM_Someone like you 閱讀(1031) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)