java 雙因素認證(2FA)demo

很早就知道有這個東西了,一直不知道是怎么實現的.
比如 QQ 安全中心的密鑰,U盾之類的.
今天看到阮一峰老師的博客才知道實現原理.
概念性的東西參考
http://www.ruanyifeng.com/blog/2017/11/2fa-tutorial.html
實現代碼:

package totp;

import java.security.MessageDigest;
import java.util.Date;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TOTP {

    // TC = floor((unixtime(now) ? unixtime(T0)) / TS)
    // TC = floor(unixtime(now) / 30)
    // TOTP = HASH(SecretKey, TC)
    private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray();

    public static void main(String[] args) {

        Pattern pattern = Pattern.compile("\\d");
        String key = UUID.randomUUID().toString().replace("-", "");

        for (int i = 0; i < 70; i++) {

            String TC = String.valueOf((int) Math.floor(new Date().getTime() / 1000 / 30));
            String TOTP = sha1(TC + key);

            Matcher matcher = pattern.matcher(TOTP);
            String result = "";
            while (matcher.find()) {
                result += matcher.group();
            }
            result = result.substring(result.length() - 6);
            System.out.println(i + "  --  " + result);

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public static String sha1(String srcStr) {
        return hash("SHA-1", srcStr);
    }

    public static String hash(String algorithm, String srcStr) {
        try {
            MessageDigest md = MessageDigest.getInstance(algorithm);
            byte[] bytes = md.digest(srcStr.getBytes("utf-8"));
            return toHex(bytes);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static String toHex(byte[] bytes) {
        StringBuilder ret = new StringBuilder(bytes.length * 2);
        for (int i = 0; i < bytes.length; i++) {
            ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
            ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
        }
        return ret.toString();
    }
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末脆丁,一起剝皮案震驚了整個濱河市喷兼,隨后出現的幾起案子,更是在濱河造成了極大的恐慌俱恶,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件页衙,死亡現場離奇詭異区转,居然都是意外死亡,警方通過查閱死者的電腦和手機瞻润,發(fā)現死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門喘垂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甜刻,“玉大人,你說我怎么就攤上這事正勒〉迷海” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵章贞,是天一觀的道長尿招。 經常有香客問我,道長阱驾,這世上最難降的妖魔是什么就谜? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮里覆,結果婚禮上丧荐,老公的妹妹穿的比我還像新娘。我一直安慰自己喧枷,他們只是感情好虹统,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著隧甚,像睡著了一般车荔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上戚扳,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天忧便,我揣著相機與錄音,去河邊找鬼帽借。 笑死珠增,一個胖子當著我的面吹牛,可吹牛的內容都是我干的砍艾。 我是一名探鬼主播蒂教,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼脆荷!你這毒婦竟也來了凝垛?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蜓谋,失蹤者是張志新(化名)和其女友劉穎梦皮,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體孤澎,經...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡届氢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了覆旭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片退子。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡岖妄,死狀恐怖,靈堂內的尸體忽然破棺而出寂祥,到底是詐尸還是另有隱情荐虐,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布丸凭,位于F島的核電站福扬,受9級特大地震影響,放射性物質發(fā)生泄漏惜犀。R本人自食惡果不足惜铛碑,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虽界。 院中可真熱鬧汽烦,春花似錦、人聲如沸莉御。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽礁叔。三九已至牍颈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間琅关,已是汗流浹背煮岁。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留死姚,地道東北人人乓。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓勤篮,卻偏偏與公主長得像都毒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子碰缔,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內容

  • 我們離回憶太近账劲, 離自由太遠。 有時候念念不忘金抡, 只是愛上回憶瀑焦。 有一天你會發(fā)現, 那些離去的梗肝, 不過是你錯愛的人...
    純一新生閱讀 288評論 2 4
  • 我們都不知道榛瓮,自己最后究竟會成為誰的過客,只是巫击,當揮手過后禀晓,卻不知道這手精续,該放在何處,這染了灰的悲涼粹懒,豈是三言兩語...
    二姥爺沒有春天閱讀 346評論 0 0
  • 文:茉莉 今天 重要的話 請對我的左耳說 它會仔細聽 天明 沉寂清醒 右耳鈍然失靈 不止隔層紗 明明 時常抱怨 聽...
    茉莉的小茶館閱讀 280評論 2 3