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

2017-06-30 21:22:50 +08:00
 lancegin

MinaOTP

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

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

小程序码

截图

功能

计划

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

开源

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

MinaOTP 传送门 ->


jsotp

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

该模块基于 RFC4226 ( HOTP:基于计数器的一次性密码算法)和 RFC6238( 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 传送门 ->

4070 次点击
所在节点    分享创造
12 条回复
sobigfish
2017-06-30 22:51:26 +08:00
👍,拿来自用 TOTP 不够安全,但可以融入企业网站应用什么的 2FA 用,那些普通用户估计也不会去下 Google Authenticator
lancegin
2017-06-30 23:02:35 +08:00
@sobigfish 嗯, 结合下面的 jsotp module,从生成 token,到 2FA 的验证全流程都跑通了 ,,话说自用 TOTP 的不够安全是指哪方面呢
sobigfish
2017-06-30 23:12:27 +08:00
@lancegin #2 key(token) 现在是存在 wx.setStorage 里的?
虽然文档里写的是“ localStorage 是永久存储的” 但感觉对比独立的 app 而言容易掉
lancegin
2017-06-30 23:18:51 +08:00
@sobigfish 确实,这就得看微信小程序具体设计了,,不过我在 todo 里写有一个自定义数据存储,就是为了解决这个问题,同时增加与用户同步的功能,这对于我个人是很有需求的🌝
sobigfish
2017-06-30 23:21:56 +08:00
用户同步就涉及到 key 的第三存储了
所以,我要备份的话首选系统级的同步备份比如 iCloud 了
lancegin
2017-06-30 23:33:20 +08:00
@sobigfish 自定义第三存储,各人首选都不同
BOYPT
2017-06-30 23:52:34 +08:00
@sobigfish #3 话说这个永久存储,换一台手机登陆微信是否会同步?
wxsolo
2017-06-30 23:55:19 +08:00
这个对有需要,但使用频率不高的人实在太方便了
lancegin
2017-07-01 06:11:39 +08:00
@BOYPT 本地存储是不会同步的,准备加上的自定义三方存储就能达到这个目的了
chroming
2017-07-01 14:09:17 +08:00
之前想用 Pythonista 写个,写好 demo 就懒得写了……
lancegin
2017-07-01 16:15:33 +08:00
@chroming pythonista 可以在移动端调用本地 py 模块吗
chroming
2017-07-01 22:58:03 +08:00
@lancegin 你的本地是指 pc? 没研究过

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/372243

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX