1. 程式人生 > >黃聰:OTP動態密碼_Java程式碼實現

黃聰:OTP動態密碼_Java程式碼實現

OTP認知 
動態口令(OTP,One-Time Password)又稱一次性密碼,是使用密碼技術實現的在客戶端和伺服器之間通過共享祕密的一種認證技術,是一種強認證技術,是增強目前靜態口令認證的一種非常方便技術手段,是一種重要的雙因素認證技術,動態口令認證技術包括客戶端用於生成口令產生器的,動態令牌,是一個硬體裝置,和用於管理令牌及口令認證的後臺動態口令認證系統組成。

一、OTP歷史溯源

   動態口令(OTP)有一個同名確不同翻譯的前輩,一次性密碼(OTP, One-Time Pad),也叫密電本,是一種應用於軍事領域的諜報技術,即對通訊資訊使用預先約定的一次性密電本進行加密和解密,使用後的密電本部分丟棄不再使用,能夠做到一次一密。如果看過一些國內的諜戰電視劇可能會對在二戰時期,日本轟炸重慶中的一個號稱“獨臂大盜”的日本間諜有印象的話,他同日軍通電使用的就是一次性密碼技術,使用諾貝爾獲獎的小說《The Good Earth》進行諜報編碼,最後是被稱為美國密碼之父的赫伯特·亞德利破獲。而目前在安全強認證領域使用的OTP動態密碼技術,源於最早由RSA公司於1986年開發的RSA SecureID產品,動態密碼並不是一次性密碼技術,而是動態一次性口令技術。目前,國際上動態口令OTP有2大主流演算法,一個是RSA SecurID ,一個是OATH組織的OTP演算法。如果在國內來說的話,另一個是國密的OTP密碼演算法。RSA SecurID使用AES對稱演算法,OATH使用HMAC演算法,國密演算法使用的國密SM1(對稱)和SM3(HASH)演算法。

二、OTP認證原理與同步方法

   動態口令的基本認證原理是在認證雙方共享金鑰,也稱種子金鑰,並使用的同一個種子金鑰對某一個事件計數、或時間值、或者是非同步挑戰數進行密碼演算法計算,使用的演算法有對稱演算法、HASH、HMAC,之後比較計算值是否一致進行認證。可以做到一次一個動態口令,使用後作廢,口令長度通常為6-8個數字,使用方便,與通常的靜態口令認證方式類似,使用方便與系統整合好,因此OTP動態口令技術的應用非常普遍,可以應用於多種系統渠道使用,如:Web應用、手機應用、電話應用、ATM自助終端等。

動態口令的同步機制有3種,即時間型、事件型和挑戰與應答型,目前應用最多的是時間型動態口令,挑戰與應答型動態口令的應用也逐漸增多,並且動態口令逐漸變為多種同步型別複合的機制發展,如時間+挑戰與應答型。

   目前在資訊系統中使用的增強型認證技術包括:

   1 USBKey: 申請PKI證書。

   2 動態口令卡:列印好的密碼刮刮卡。

   3 動態簡訊:使用電信通道下發口令。

   4 IC卡/SIM卡:內建與使用者身份相關的資訊。

   5 生物特徵:採用獨一無二的生物特徵來驗證身份,如指紋。

   6 動態令牌:動態口令生成器和認證系統。

現在直接上程式碼實現OTP動態密碼:

private static final int[] DIGITS_POWER
    = {1,10,100,1000,10000,100000,1000000,10000000,100000000};

    public static byte[] hmac_sha1(byte[] keyBytes, byte[] text)throws NoSuchAlgorithmException, InvalidKeyException{
        try {//ֵ
            Mac hmacSha1;
            try {
                hmacSha1 = Mac.getInstance("HmacSHA1");
            } catch (NoSuchAlgorithmException nsae) {
                hmacSha1 = Mac.getInstance("HMAC-SHA-1");
            }
            SecretKeySpec macKey =new SecretKeySpec(keyBytes, "RAW");
            hmacSha1.init(macKey);
            return hmacSha1.doFinal(text);
            } catch (GeneralSecurityException gse) {
                throw new UndeclaredThrowableException(gse);
            }
    }
    public static String generateOTP(byte[] secret,long movingFactor,int codeDigits)throws NoSuchAlgorithmException, InvalidKeyException
    {
        StringBuffer result = new StringBuffer("");
        byte[] text = new byte[6];
        for (int i =text.length-1; i >=0; i--) {
            text[i] = (byte) (movingFactor & 0xff );   //
            movingFactor >>= 6;
        }
        byte[] hash = hmac_sha1(secret, text);     //Step 1: Generate an HMAC-SHA-1 value 
        int offset =( hash[hash.length - 1] & 0xf)+3;   //
        int binary =
                ((hash[offset] & 0x7f) << 24)
                | ((hash[offset - 1] & 0xff) << 16)
                | ((hash[offset - 2] & 0xff) << 8)
                | (hash[offset - 3] & 0xff);           //Generate a 4-byte string 
        int otp = binary % DIGITS_POWER[codeDigits-1];
        result .append(Integer.toString(otp));
        while (result.length() < codeDigits) {
            result.insert(0, "0");                    //Compute an HOTP value
        }
        return result.toString();
    }

測試: 
這裡寫圖片描述

相關推薦

OTP動態密碼_Java程式碼實現

OTP認知 動態口令(OTP,One-Time Password)又稱一次性密碼,是使用密碼技術實現的在客戶端和伺服器之間通過共享祕密的一種認證技術,是一種強認證技術,是增強目前靜態口令認證的一種非常方便技術手段,是一種重要的雙因素認證技術,動態口令認證技術包括客戶端用於生成口令產生器的,動態令牌,是一個

OTP動態密碼_Java代碼實現

-c name 好的 動態口令 comm final 並不是 bsp down OTP認知 動態口令(OTP,One-Time Password)又稱一次性密碼,是使用密碼技術實現的在客戶端和服務器之間通過共享秘密的一種認證技術,是一種強認證技術,是增強目前靜態口令

浮動視窗程式碼(帶關閉按鈕+全屏漂浮)

<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>帶關閉按鈕的浮動視窗程式碼(全屏漂浮)</title></head

ffmpeg基本用法(轉)

sca wid cal ner aspect mp4 動態文本 tegra 控制輸出 FFmpeg FFmpeg 基本用法 本課要解決的問題 1.FFmpeg的轉碼流程是什麽? 2.常見的視頻格式包含哪些內容嗎? 3.如何把這些內容從視頻文件中抽取出來? 4.如

FFmpeg 使用指南

留下 時間 下一個 pseudo rdquo tle 全局 什麽 實時 1. ffmpeg 是什麽? ffmpeg(命令行工具) 是一個快速的音視頻轉換工具。 2. ffmpeg 的使用方式 命令行: ffmpeg [全局選項] {[輸入文件選項] -i &lsquo

FFmpeg視頻轉碼技巧之-crf參數(H.264篇)

文件中 one log 它的 忽略 enter center tail vcd 昨天,有個朋友給我出了個難題:他手上有一個視頻,1080P的,49秒,200多兆;要求在確保質量的情況下把文件壓縮到10M以內。 這是什麽概念呢?按照文件大小10M來計算,碼率是:10 x 8

濃縮的才是精華淺析GIF格式圖片的存儲和壓縮(轉)

meid 單獨 圖片分辨率 change 之前 dex 本質 0.11 blog http://www.cnblogs.com/qcloud1001/p/6647080.html 成文迪, 在Web前端摸爬滾打的碼農一枚,對技術充滿熱情的菜鳥,致力為手Q的建設添磚加瓦

PHP數據庫連接失敗--could not find driver 解決辦法

才會 pdo_mysq php 驅動 mysq sql ould 數據庫 對象 數據庫連接失敗could not find driver在調試一個PHP程序時,報了這個錯誤, could not find driver 經過一番查找,結合自己的思考和實踐,終於找到了問題所在

JQUERY判斷操作CHECKBOX選中、取消選中、反選、第二次無法選中的問題

clas 再次 box als 修改 api disable jquer checkbox 用JQuery做CheckBox全選和反選的時候,遇到一個問題。當用JQ控制全選,全取消一次以後,再次點擊全選,發現代碼變了,但是CheckBox沒有處於選中狀態。 $(

Jquery+DataTables插件,如何在ajax調用服務器數據後,自動給tr添加id屬性

jquer ida ted fnr pos sid idt 事件 all http://legacy.datatables.net/usage/callbacks#fnRowCallback 主要通過 fnCreatedRow 事件來實現 var table = $

jquery.bootgrid表格插件有的屬性(visibleInSelection、cssClass、headerCssClass、headerAlign)不能識別的解決辦法

oot div 添加 bsp load scl 不能 大小 jquer 主要是屬性大小寫問題,修改jquery.bootgrid.js文件,在function loadColumns()方法裏面添加下面的語句就好了 data.headerAlign = data.he

iOS $299刀企業證書申請的過程以及細節補充

別人 華夏鄧白氏 details 等等 .com 註意 內容 QQ blog 最近申請了iOS的 299刀企業證書,相關過程有些問題,分享出來,以便後來人參考。申請的過程我主要參考了別人以前的文章,鏈接如下:1、https://developer.apple.com/cn/

AngularJS最理想開發工具WebStorm

java tool row scl ng-repeat data- oom repos href Aug 29, 2013 Tags: angularangular.jsangularjswebstorm Comments: 23 Comments

通過 itms:services://? 在線安裝ipa ,跨過appstore

ins with 安裝 .get 解決方法 str war item 點擊 1.需要一個html文件,引導下載用戶在線安裝ipa <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">&

JS數學計算精度修正

function 浮點數 turn 計算 filesize add follow fun his 問題描述 如果我問你,4330.61乘以100等於多少,我猜你肯定跟我說:“肯定是 433061”啊! 是啊,要我我也是這麽回答,來來來我們

史上最詳細的kali安裝教程沒有之一

ner 沒有 操作系統 你是 著作權 如圖所示 鏈接 class 區域 首先在vm裏面新建虛擬機,直接選擇典型,然後下一步。 1 2 然後到了這一步,選擇中間的安裝程序光盤鏡像文件,然後去文件裏面

mysql主從配置(清晰的思路)

   mysql主從配置。鄙人是在如下環境測試的:   主資料庫所在的作業系統:win7   主資料庫的版本:5.0   主資料庫的ip地址:192.168.1.111   從資料庫所在的作業系統:linux   從資料的版本:5.0   從資料庫的ip地址:192.168.1.112 介紹完

Mysql主從配置,實現讀寫分離

大型網站為了軟解大量的併發訪問,除了在網站實現分散式負載均衡,遠遠不夠。到了資料業務層、資料訪問層,如果還是傳統的資料結構,或者只是單單靠一臺伺服器扛,如此多的資料庫連線操作,資料庫必然會崩潰,資料丟失的話,後果更是 不堪設想。這時候,我們會考慮如何減少資料庫的聯接,一方面採用優秀的程式碼框架,進行程式碼的優

原生js的音訊播放器,相容pc端和移動端(原創)

更新時間:2018/9/3 下午1:32:54 更新說明:新增音樂的loop設定和ended事件監聽 loop為ture的時候不執行ended事件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 const wx 

如何擴充套件Chrome DevTools來獲取頁面請求

1. Chrome DevTools Extension 剛看到的時候,我也覺得很神奇, 因為React Developer Tools和其他Chrome Extension不同, 它居然出現在了Chrome開發者工具欄中,和原生的DevTools