新浪微盤微盾項(xiàng)目介紹_第1頁
新浪微盤微盾項(xiàng)目介紹_第2頁
新浪微盤微盾項(xiàng)目介紹_第3頁
新浪微盤微盾項(xiàng)目介紹_第4頁
新浪微盤微盾項(xiàng)目介紹_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論