仿新浪微盾客戶端專案簡介四

2021-09-06 14:07:45 字數 3018 閱讀 3401

上節我們說到我們主要的演算法是在google的乙個開源專案google authenticator 修改的。那麼我們窺探一下google authenticator的全貌。

我們通過源**來了解,上**:

首先是一些噼里啪啦的定義的常量,變數。

private

static

final

int pass_code_length = 6;

static

final

int interval = 30;

private

static

final

int adjacent_intervals = 1;

private

static

final

int pin_modulo = (int) math.pow(10, pass_code_length); //

pow是求10的pass_code_length次方

private

final

signer signer;

private

final

intcodelength;

private

final

intintervalperiod;

public

boolean

iscreated;

public

long

timeoffset;

private handler handler;

這些所謂的常量了,定義了他產生的的長度和時間。從這些定義的常量我們可以得出來這麼的結果。他是每30秒的中的時間了產生了乙個不同的code,並且他產生的值是在000000-100000中的值。下面變數主要是判斷他是否建立了,並且由handler來非同步處理相應的結果。

下面源**是乙個介面和四個建構函式方法的過載。

inte***ce

signer

public

passcodegenerator(mac mac)

public passcodegenerator(final mac mac, int passcodelength, int

interval)

}, passcodelength, interval);

}public passcodegenerator(final mac mac, int passcodelength, int

interval,

handler handler)

public passcodegenerator(signer signer, int passcodelength, int

interval)

這個介面是實現觀察者模式,能將byte陣列轉換成簽名後到底byte的陣列了。而不同的建構函式,無非是實現方法層面的多型,傳遞不同的引數,得到的處理結果.

下面的源**做的歸根結底,就是這麼一件事情,能夠根據傳遞進來的時間型別來產生了相應的值輸出了,當然了,這又有一些的複雜的邏輯判斷了,使其不產生了相應重複的數字。

private string padoutput(int

value)

return

result;

}public string generatetimeoutcode(boolean iscreated ,long

timeoffset)

throws

generalsecurityexception

public string generateresponsecode(long

challenge)

throws

generalsecurityexception

public string generateresponsecode(byte

challenge)

throws

generalsecurityexception

private

int hashtoint(byte bytes, int

start)

catch

(ioexception e)

return

val;

}public

boolean verifyresponsecode(long

challenge, string response)

throws

generalsecurityexception

public

boolean

verifytimeoutcode(string timeoutcode)

throws

generalsecurityexception

public

boolean verifytimeoutcode(string timeoutcode, int

pastintervals,

int futureintervals) throws

generalsecurityexception

for (int i = 1; i <= pastintervals; i++)

}for (int i = 1; i <= futureintervals; i++)

}return

false

; }

下面的源**,是通過了colock物件來產生相應值。

private intervalclock clock = new

intervalclock()

return

count;

}public

intgetintervalperiod()

};inte***ce

intervalclock

觀察源**,我們可以清晰開出來,相應時間的毫秒通過整除,求摸這些基本的變化,來得到最終的6位時間格式的值。

總之,通過這個類,能夠得到了hopt演算法後值,起到乙個不產生重複值的效果,提高威盾的安全性。

仿新浪微盾客戶端專案簡介四

上節我們說到我們主要的演算法是在google的乙個開源專案google authenticator 修改的。那麼我們窺探一下google authenticator的全貌。我們通過源 來了解,上 首先是一些噼里啪啦的定義的常量,變數。private static final int pass cod...

仿新浪微盾客戶端專案簡介五

這節中,我們我們來討論微盾上介面上實現的二三事。這也是這個專案的重頭戲。介面上我們要做乙個什麼效果,乙個倒計時的效果了,這個倒計時效果以後用的很多,希望對大家有幫助。我這裡布局方式用到了幀布局的方式,乙個是所謂的表盤的情況,乙個是倒計時的秒針,相應的布局檔案如下了 那個rin iew是我自定義的表盤...

仿新浪微盾客戶端專案簡介三

上節我們說到,關於opt演算法的說明,也說到這個專案是使用totp 基於時間 方法。這節講的主要把它怎麼整合專案中。整合專案中,此演算法需要注意這麼幾點。1.與伺服器端統一的準確時間 由於是使用totp演算法,客戶端與伺服器端的演算法是必須要儲存一致的。對時介面 獲取伺服器端準確時間,返回,以秒為單...