上節我們說到我們主要的演算法是在google的乙個開源專案google authenticator 修改的。那麼我們窺探一下google authenticator的全貌。
我們通過源**來了解,上**:
首先是一些噼里啪啦的定義的常量,變數。
privatestatic
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***cesigner
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(intvalue)
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 = newintervalclock()
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演算法,客戶端與伺服器端的演算法是必須要儲存一致的。對時介面 獲取伺服器端準確時間,返回,以秒為單...