版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
的,微盾是由新浪網(wǎng)推出的一款產(chǎn)生
動(dòng)態(tài)產(chǎn)品,可以用于新浪旗下各服務(wù),包括新付通,SAE等。可有效提高帳號安全性。項(xiàng)目介紹版微盾項(xiàng)目介紹官網(wǎng)的介紹htt/instruction(模擬器演示)項(xiàng)目介紹OTP是One-Time
Password的簡稱,可稱之為一
次性口令,也稱動(dòng)態(tài)口令。每個(gè)口令只能使用一次,按照時(shí)間或使用次數(shù)不斷動(dòng)態(tài)變化,是隨機(jī)、不可、不重復(fù)使用的數(shù)字組合?;蛘咂淇诹顏碓诖笮推髽I(yè)中,辦公網(wǎng)的接入和
的他重要數(shù)據(jù)的
等通常都需要使用進(jìn)行認(rèn)證。OTP算法說明OTP
算法說明HOTP(基于事件)HOTP算法是基于一個(gè)加法計(jì)數(shù)器和一個(gè)靜態(tài)對稱密鑰的,該密鑰僅有令牌和認(rèn)證服務(wù)器知道,如下:C:一個(gè)遞增的值,可以看作是一個(gè)計(jì)數(shù)器K:一個(gè)靜態(tài)對稱密鑰每次進(jìn)行 驗(yàn)證的時(shí)候,雙方都利用下面的算法來生成一個(gè)動(dòng)態(tài)的值:HOTP(K,C)
=
Truncate(HMAC-SHA-1(K,C))OTP算法說明TOTP(基于時(shí)間)(微盾采取此方案)TOTP
的算法與HOTP
的不同在于,HOTP是基于事件的,
TOTP是基于時(shí)間的,也就是說用一個(gè)由時(shí)間和更新頻率得出的T來代替HOTP中的計(jì)數(shù)器C
。如下:X:表示更新頻率,單位為秒,默認(rèn)為60秒T0:表示時(shí)間偏移量,默認(rèn)為0,T=(當(dāng)前時(shí)間-T0)/XTOTP
=
HOTP(K,
T)
=Truncate(HMAC-SHA-1(K,
T))OTP算法說明由OTP加密算法可知,如果要算出一個(gè)準(zhǔn)確的6位動(dòng)態(tài)
,需要滿足兩個(gè)條件:1.
與服務(wù)器端
的準(zhǔn)確時(shí)間2.靜態(tài)密鑰設(shè)計(jì)方案1.
與服務(wù)器端
的準(zhǔn)確時(shí)間對時(shí)接口,獲取服務(wù)器端準(zhǔn)確時(shí)間,返回{“svr_time”:1319512158},以秒為單位的時(shí)間戳?xí)r間偏移量=本地時(shí)間–服務(wù)器端時(shí)間將時(shí)間偏移量保存在本地SharePreference中,供計(jì)算動(dòng)態(tài)時(shí)服務(wù)器端時(shí)間=本地時(shí)間-時(shí)間偏移量使用時(shí)間偏移量的好處是:只需要從服務(wù)器獲取一次時(shí)間,以后都可以離線使用微盾設(shè)計(jì)方案2.靜態(tài)密鑰加密后保存在本地加密算法為DES,一種對稱加密算法,支持加密密鑰=固定字符串+設(shè)備IMEI號碼設(shè)計(jì)方案有了準(zhǔn)確的服務(wù)器時(shí)間和靜態(tài)密鑰,就能計(jì)算出正確的6位動(dòng)態(tài)當(dāng)用戶輸入動(dòng)態(tài)時(shí)間和密鑰算出6位登錄時(shí),服務(wù)器會使用同樣的進(jìn)行比對。服務(wù)器做了容錯(cuò)處理,會計(jì)算出在某個(gè)時(shí)刻前1分鐘和后一分鐘的所有6位,只要用戶輸入正確了其中一個(gè),就算通過設(shè)計(jì)方案OTP算法相關(guān)代碼開源的OTP客戶端:http
/p/
-authenticator/包含Android、iOS、Blackberry三個(gè)平臺的,算法部分可做參考代碼編寫Authenticator新浪微盾版流程圖新浪微盾版流程說明及接口定義計(jì)算OTPint
REFRESH_INTERVAL_SEC=60;//間隔時(shí)間(秒)Mac
mac=Mac.getInstance("HMACSHA1");mac.init(new
SecretKeySpec(secretStr.getBytes(),""));PasscodeGenerator
pcg
=ne
sscodeGenerator(mac,
6,REFRESH_INTERVAL_SEC);//6表示6位動(dòng)態(tài)String
otpCode
=
pcg.generateTimeoutCode(timeOffset);//timeOffset是時(shí)間偏移量部分代碼實(shí)現(xiàn)細(xì)節(jié)部分代碼實(shí)現(xiàn)細(xì)節(jié)展示效果實(shí)現(xiàn)倒計(jì)時(shí)動(dòng)畫效果實(shí)現(xiàn)<FrameLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"
><com.sina.vdun.view.RingViewandroid:layout_width="@dimen/ring_view_width"android:layout_height="@dimen/ring_view_height"
></com.sina.vdun.view.RingView><com.sina.vdun.view.CountdownIndicatorandroid:id="@+id/pb_progress"android:layout_width="@dimen/countdown_indicator_width"android:layout_height="@dimen/countdown_indicator_height"android:layout_gravity="center"
></com.sina.vdun.view.CountdownIndicator></FrameLayout>倒計(jì)時(shí)動(dòng)畫效果實(shí)現(xiàn)protected
void
onDraw(Canvas
paramCanvas){this.paint.setAntiAlias(true);//沒有鋸齒this.paint.setStyle(Paint.Style.STROKE);//畫空心//繪制內(nèi)圓this.paint.setARGB(155,
167,
190,
206);this.paint.setStrokeWidth(2);//設(shè)置線條寬度paramCanvas.drawCircle(center,center,innerCircle,this.paint);//innerCircle:半徑//繪制圓環(huán)this.paint.setARGB(255,
212
,225,
233);this.paint.setStrokeWidth(ringWidth);//中間圓環(huán)寬度paramCanvas.drawCircle(center,center,
innerCircle+1+ringWidth/2,
this.paint);//繪制外圓this.paint.setARGB(155,
167,
190,
206);this.paint.setStrokeWidth(2);paramCanvas.drawCircle(center,center,
innerCircle+ringWidth,
this.paint);}外部圓環(huán)的繪制方法其實(shí)就是不斷繪制扇形初始化畫筆this.mRemainingSectorPaint
=
ne
int();this.mRemainingSectorPaint.setAntiAlias(true);RadialGradient
rg
=
new
RadialGradient(
112,
112,
75,Color.argb(255,
143,
201,
233),Color.argb(255,
166,
212,235),TileMode.MIRROR);//漸變this.mRemainingSectorPaint.setShader(rg);實(shí)心圓的繪制方法扇形繪制方法paramCanvas.drawArc(localRectF,f2,f1,true,localPaint1);//f2:起始角度,f1:掃描幅度通過一個(gè)定時(shí)器,每100毫秒重繪一下扇形,就實(shí)現(xiàn)了倒計(jì)時(shí)的動(dòng)畫效果實(shí)心圓的繪制方法一共6位,以第一位數(shù)字為例:初始化動(dòng)畫對象final
AnimationDrawable
ad1
=
newAnimationDrawable();ad1.setOneShot(true);//表示只執(zhí)行一次動(dòng)態(tài)
動(dòng)畫效果fra mber
=
9;frameTime
=
30;//循環(huán)9次,共加9張隨機(jī)for(int
i=0;i<fra mber;i++)
{int
random=(int)Math.round(Math.random()*
9);//隨機(jī)生成0—9的數(shù)字Drawableframe=getResources().getDrawable(OTPImages[random]);//取出對應(yīng)ad1.addFrame(frame,frameTime);//為動(dòng)畫加一幀}//生成最后一幀,此幀為準(zhǔn)確的 數(shù)字Drawable
frame1
=getResources().getDrawable(OTPImages[Integer.parseInt(passCode.charAt(0)
+
"")]);ad1.addFrame(frame1,
frameTime);ivBit1.setBack
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 沈陽理工大學(xué)《激光器件與技術(shù)》2021-2022學(xué)年第一學(xué)期期末試卷
- 食品安全宣傳主題班會
- 沈陽理工大學(xué)《工程爆破》2023-2024學(xué)年第一學(xué)期期末試卷
- 沈陽理工大學(xué)《傳感器與檢測技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 國有企業(yè)買賣合同保證金管理辦法
- 合同備案注銷、更名申請書
- 昆明機(jī)場控制區(qū)通行證考試
- 2024-2025年度部編版八年級上冊歷史復(fù)習(xí)訓(xùn)練一
- 2024水泥采購運(yùn)輸合同
- 深圳矯正牙齒-口腔醫(yī)院
- 管理能力與領(lǐng)導(dǎo)力管理培訓(xùn)
- 2023上半年四川公務(wù)員考試申論試題(省市卷)
- 2024年度專業(yè)會務(wù)組織服務(wù)協(xié)議書版
- 函數(shù)的圖象及變換省公開課獲獎(jiǎng)?wù)n件說課比賽一等獎(jiǎng)?wù)n件
- 行政復(fù)議法-形考作業(yè)3-國開(ZJ)-參考資料
- MOOC 職場英語-西南交通大學(xué) 中國大學(xué)慕課答案
- JTG C10-2007 公路勘測規(guī)范
- 聯(lián)合辦公協(xié)議書范本
- SCA涂膠機(jī)內(nèi)部培訓(xùn)資料
- GB/T 5237.1-2017鋁合金建筑型材第1部分:基材
- GB/T 18284-2000快速響應(yīng)矩陣碼
評論
0/150
提交評論