爱意满满的作品展示区。
lancegin

[开源] 便携的二步验证小程序 及 基于 RFC4226 和 RFC6238 的一次性密码生成及验证 node 模块

  •  1
     
  •   lancegin ·
    lancegin · Jun 30, 2017 · 4724 views
    This topic created in 3268 days ago, the information mentioned may be changed or developed.

    MinaOTP

    MinaOTP 是一款用来生成二步验证 token 的小程序,基于 RFC6238 实现,TOTP 算法由javascript实现。

    小程序会安全地实时计算动态二步验证 token,token 的增加编辑删除也很方便。

    小程序码

    qrcode

    截图

    screenshot

    功能

    • 计算二步验证 token
    • 扫码添加新的 token
    • 手动输入 token 添加
    • 编辑服务和帐号备注信息
    • 删除已存在的 token

    计划

    1. 备份数据至用户自定义数据库
    2. 优化进度条

    开源

    小程序代码已在 Github 上开源。

    MinaOTP 传送门 ->


    jsotp

    jsotp是一个用来生成用来生成及验证一次性密码的 js 模块,一次性密码通常用来在 web 应用或者其他登录系统中作为二步验证或多步验证使用。

    该模块基于 RFC4226 ( HOTP:基于计数器的一次性密码算法)和 RFC6238( TOTP:基于时间的一次性密码算法)实现

    示例

    功能

    • 随机生成 base32 加密的字符串
    • 创建可验证的 HOTP 对象
    • 验证 HOTP 密码
    • 创建可验证的 TOTP 对象
    • 验证 TOTP 密码

    安装

    npm install jsotp
    

    模块

    全部模块支持:

    let jsotp = require('jsotp');
    

    使用

    基于时间的 OTP

    // import
    let jsotp = require('jsotp');
    
    // Create TOTP object
    let totp = jsotp.TOTP('BASE32ENCODEDSECRET');
    totp.now(); // => 432143
    
    // Verify for current time
    totp.verify(432143); // => true
    
    // Verify after 30s
    totp.verify(432143); // => false
    

    基于计数器的 OTP

    // import
    let jsotp = require('jsotp');
    
    // Create HOTP object
    let hotp = jsotp.HOTP('BASE32ENCODEDSECRET');
    hotp.at(0); // => 432143
    hotp.at(1); // => 231434
    hotp.at(2132); // => 242432
    
    // Verify with a counter
    hotp.verify(242432, 2132); // => true
    hotp.verify(242432, 2133); // => false
    

    生成随机 base32 加密字符串

    // import
    let jsotp = require('jsotp');
    
    // Generate
    let b32_secret = jsotp.Base32.random_gen();
    

    开源

    jsotp 传送门 ->

    传送门整合

    MinaOTP 传送门 ->

    jsotp 传送门 ->

    12 replies    2017-07-01 22:58:03 +08:00
    run2
        1
    run2  
       Jun 30, 2017
    👍,拿来自用 TOTP 不够安全,但可以融入企业网站应用什么的 2FA 用,那些普通用户估计也不会去下 Google Authenticator
    lancegin
        2
    lancegin  
    OP
       Jun 30, 2017 via iPhone
    @sobigfish 嗯, 结合下面的 jsotp module,从生成 token,到 2FA 的验证全流程都跑通了 ,,话说自用 TOTP 的不够安全是指哪方面呢
    run2
        3
    run2  
       Jun 30, 2017
    @lancegin #2 key(token) 现在是存在 wx.setStorage 里的?
    虽然文档里写的是“ localStorage 是永久存储的” 但感觉对比独立的 app 而言容易掉
    lancegin
        4
    lancegin  
    OP
       Jun 30, 2017 via iPhone
    @sobigfish 确实,这就得看微信小程序具体设计了,,不过我在 todo 里写有一个自定义数据存储,就是为了解决这个问题,同时增加与用户同步的功能,这对于我个人是很有需求的🌝
    run2
        5
    run2  
       Jun 30, 2017
    用户同步就涉及到 key 的第三存储了
    所以,我要备份的话首选系统级的同步备份比如 iCloud 了
    lancegin
        6
    lancegin  
    OP
       Jun 30, 2017 via iPhone
    @sobigfish 自定义第三存储,各人首选都不同
    BOYPT
        7
    BOYPT  
       Jun 30, 2017
    @sobigfish #3 话说这个永久存储,换一台手机登陆微信是否会同步?
    wxsolo
        8
    wxsolo  
       Jun 30, 2017
    这个对有需要,但使用频率不高的人实在太方便了
    lancegin
        9
    lancegin  
    OP
       Jul 1, 2017 via iPhone
    @BOYPT 本地存储是不会同步的,准备加上的自定义三方存储就能达到这个目的了
    chroming
        10
    chroming  
       Jul 1, 2017 via iPhone
    之前想用 Pythonista 写个,写好 demo 就懒得写了……
    lancegin
        11
    lancegin  
    OP
       Jul 1, 2017 via iPhone
    @chroming pythonista 可以在移动端调用本地 py 模块吗
    chroming
        12
    chroming  
       Jul 1, 2017
    @lancegin 你的本地是指 pc? 没研究过
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2875 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 93ms · UTC 15:18 · PVG 23:18 · LAX 08:18 · JFK 11:18
    ♥ Do have faith in what you're doing.