名稱 | SecurityOrder |
---|---|
語言 | Android |
平臺 | GitOSC |
作者 | 流年 |
鏈接 | 點此進入 |
備注 | 更多精彩開源庫推薦請訪問明燈小站 |
TOTP(Time-base One-Time Password)譯為基于時間的一次性密碼,也稱時間同步的動態密碼。應用范圍:對安全性要求比較高的場合,可以進行密碼的二次認證,例如:游戲,銀行等業務。
該庫的加密工具類主要參考google-authenticator 加密原理:使用HMAC算法,利用哈希算法,以一個密鑰和一個消息為輸入,生成一個消息摘要作為輸出。 這里的密鑰參數:base32生成,消息參數:時間戳(秒單位)/時間間隔(TimeStep) (tips: 例如 TimeStep=30 30內生成密碼一樣,就是誤差30s)
效果圖
TOTP效果圖
TOTP的要求
- 客戶端和服務器必須能夠彼此知道或者推算出對方的Unix Time;
- 客戶端和服務器端必須共享一個密鑰 ;
- 算法必須使用HOTP作為其關鍵實現環節 ;
- 客戶端和服務器端必須使用相同的步長X ;
- 每一個客戶端必須擁有不同的密鑰 ;
- 密鑰的生成必須足夠隨機 ;
- 密鑰必須儲存在防篡改的設備上,而且不能在不安全的情況下被訪問或使用;
- 對該算法中T的實現必須大于int32,因為它在2038年將超出上限;
- T0和X的協商必須在之前的步驟中就已經做好了。
使用方法
- 將項目app\src\main\java\com\tk\securityorder\totp中的Base32String.java、PasscodeGenerator.java、TimeUtils.java等三個類添加自己項目;
- 調用PasscodeGenerator中的generateTotpNum方法:
String totpNum = TOTPPasscodeGenerator.generateTotpNum();