版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、OTP(K,C) = Truncate(HMAC-SHA-1(K,C)其中,K 表示秘鑰串;C 是一個(gè)數(shù)字,表示隨機(jī)數(shù);HMAC-SHA-1 表示使用SHA-1 做HMAC;Truncate 是一個(gè)函數(shù),就是怎么截取加密后的串,并取加密后串的哪些字段組成一個(gè)數(shù)字。對(duì) HMAC-SHA-1 方式加密來(lái)說(shuō),Truncate 實(shí)現(xiàn)如下。HMAC-SHA-1 加密后的長(zhǎng)度得到一個(gè) 20 字節(jié)的密串;動(dòng)態(tài)令牌-(OTP,HOTP,TOTP)-基本原理是 One-Time Password 的簡(jiǎn)寫,表示一次性密碼。HOTP 是HMAC-based One-Time Password 的簡(jiǎn)寫,表示基于HMA
2、C 算法加密的一次性密碼。是事件同步,通過(guò)某一特定的事件次序及相同的種子值作為輸入,通過(guò)HASH 算法運(yùn)算出一致的密碼。TOTP 是 Time-based One-Time Password 的簡(jiǎn)寫,表示基于時(shí)間戳算法的一次性密碼。是時(shí)間同步,基于客戶端的動(dòng)態(tài)口令和動(dòng)態(tài)口令驗(yàn)證服務(wù)器的時(shí)間比對(duì),一般每60 秒產(chǎn)生一個(gè)新口令,要求客戶端和服務(wù)器能夠十分精確的保持正確的時(shí)鐘,客戶端和服務(wù)端基于時(shí)間計(jì)算的動(dòng)態(tài)口令 才能一致。原理介紹OTP 基本原理計(jì)算 OTP 串的公式取這個(gè) 20 字節(jié)的密串的最后一個(gè)字節(jié),取這字節(jié)的低 4 位,作為截取加密串的下標(biāo)偏移量;按照下標(biāo)偏移量開始,獲取 4 個(gè)字節(jié),按照
3、大端方式組成一個(gè)整數(shù);截取這個(gè)整數(shù)的后 6 位或者 8 位轉(zhuǎn)成字符串返回。Java 代碼實(shí)現(xiàn)public static String generateOTP(String K,String C,String returnDigits,String crypto) intcodeDigits = Integer.decode(returnDigits).intValue();String result = null;/ K 是密碼/ C 是產(chǎn)生的隨機(jī)數(shù)/ crypto 是加密算法 HMAC-SHA-1 byte hash = hmac_sha(crypto, K, C);/ hash 為 20
4、字節(jié)的字符串/ put selected bytes into result int/ 獲取 hash 最后一個(gè)字節(jié)的低 4 位,作為選擇結(jié)果的開始下標(biāo)偏移int offset = hashhash.length - 1 & 0 xf;/ 獲取 4 個(gè)字節(jié)組成一個(gè)整數(shù),其中第一個(gè)字節(jié)最高位為符號(hào)位,不獲取,使用0 x7fint binary =(hashoffset & 0 x7f) 24) | (hashoffset + 1 & 0 xff) 16) | (hashoffset + 2 & 0 xff) 8) | (hashoffset + 3 & 0 xff);/ 獲取這個(gè)整數(shù)的后 6 位
5、(可以根據(jù)需要取后 8 位)intotp = binary % 1000000;/ 將數(shù)字轉(zhuǎn)成字符串,不夠 6 位前面補(bǔ) 0result = Integer.toString(otp);while (result.length() import base64base64.b32encode(This is my secret key) KRUGS4ZANFZSA3LZEBZWKY3SMV2CA23FPE=secretKey = base64.b32encode(This is my secret key) import pyotptotp = pyotp.TOTP(secretKey)totp
6、.now() 423779程序的簡(jiǎn)單說(shuō)明加載 base64 的模塊,將我的秘鑰做一下 base32 的加密,加載 pyotp 模塊,otp 使用base32 加密后的秘鑰傳作為種子,生成隨機(jī)數(shù)字驗(yàn)證的??梢允褂胮yotp 和 expect 一起實(shí)現(xiàn)基于google authenticator 的自動(dòng)登錄(免去每次雙認(rèn)證,輸入密碼和動(dòng)態(tài)密碼)。pyotp 的 TOTP 的使用說(shuō)明(官網(wǎng))totp = pyotp.TOTP(base32secret3232)totp.now() # = 492039# OTP verified for current time totp.verify(492039
7、) # = True time.sleep(30) totp.verify(492039) # = Falsepyotp 的 HOTP 的使用說(shuō)明(官網(wǎng))hotp = pyotp.HOTP()hotp.at(0) # = 260182 hotp.at(1) # = 55283 hotp.at(1401) # = 316439# OTP verified with a counter hotp.verify(316439, 1401) # = True hotp.verify(316439, 1402) # = False使用場(chǎng)景服務(wù)器登錄動(dòng)態(tài)密碼驗(yàn)證(如阿里云 ECS 登錄,騰訊機(jī)房服務(wù)器登錄
8、等);公司 VPN 登錄雙因素驗(yàn)證;網(wǎng)絡(luò)接入 radius 動(dòng)態(tài)密碼;銀行轉(zhuǎn)賬動(dòng)態(tài)密碼;網(wǎng)銀、網(wǎng)絡(luò)游戲的實(shí)體動(dòng)態(tài)口令牌;等動(dòng)態(tài)密碼驗(yàn)證的應(yīng)用場(chǎng)景。市面上基于 HOTP 的產(chǎn)品寧盾令牌阿里巴巴的 身份寶Google 的 身份驗(yàn)證器(google-authenticator)Google 基于 TOTP 的開源實(shí)現(xiàn)/google/google-authenticator RFC6238 中TOTP 基于java 代碼的實(shí)現(xiàn)。golang 的一個(gè) otp 做的不錯(cuò)的實(shí)現(xiàn)/gitchs/gootpRFC 參考RFC 4226 One-Time Password and HMAC-based One-Time Password. RFC 6238 Time-based One-Time Password.RFC 2104 HMAC Keyed-Hashing for Messag
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年廣西國(guó)際商務(wù)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)含答案詳解
- 2026年內(nèi)蒙古體育職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性考試題庫(kù)附答案詳解
- 2026年陜西航天職工大學(xué)單招職業(yè)技能考試題庫(kù)及參考答案詳解1套
- 2026年湖南鐵道職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)帶答案詳解
- 2026年衡陽(yáng)幼兒師范高等專科學(xué)校單招職業(yè)技能測(cè)試題庫(kù)及參考答案詳解一套
- 2026年湖南高速鐵路職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)及答案詳解1套
- 2026年云南輕紡職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及答案詳解一套
- 四川省南充市嘉陵一中2024-2025學(xué)年高二上學(xué)期第二次月考(11月)物理試題含答案物理試題
- 修理廠會(huì)計(jì)面試題及答案
- 小區(qū)地庫(kù)施工用電安全協(xié)議書范本
- 2025年重慶市勘規(guī)數(shù)智科技有限公司招聘?jìng)淇碱}庫(kù)及一套完整答案詳解
- 2026中國(guó)社會(huì)科學(xué)院招聘專業(yè)技術(shù)人員169人(第一批)筆試備考重點(diǎn)試題及答案解析
- 2026年云南中煙工業(yè)有限責(zé)任公司畢業(yè)生招聘(502人)筆試考試參考試題及答案解析
- 2025托福真題試卷(+答案)
- 2025江蘇蘇州大學(xué)勞務(wù)派遣制人員招聘3人(第五批)筆試考試參考試題及答案解析
- 海洋信息安全:大數(shù)據(jù)平臺(tái)建設(shè)保障
- 2025-2026學(xué)年人教版二年級(jí)數(shù)學(xué)上冊(cè)期末測(cè)試卷及答案
- 爐底和爐墻砌筑分項(xiàng)工程質(zhì)量檢查評(píng)估表
- 2026年沈陽(yáng)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性考試必刷測(cè)試卷帶答案
- 2025年鐵路專業(yè)基礎(chǔ)知識(shí)考試題庫(kù)(含答案)
- 2025年地面裝飾工(地磚鋪貼)考試試卷及答案
評(píng)論
0/150
提交評(píng)論