https://www.cnblogs.com/huangcong/p/11028910.html    :

https://github.com/wuyanxin/totp.js

使用JS计算Google Authenticator Code - Last_Stardust - 博客园

斯坦福大学JS加密库:

"use strict";var sjcl={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this.toString=function(){return"CORRUPT: "+this.message};this.message=a},invalid:function(a){this.toString=function(){return"INVALID: "+this.message};this.message=a},bug:function(a){this.toString=function(){return"BUG: "+this.message};this.message=a},notReady:function(a){this.toString=function(){return"NOT READY: "+this.message};this.message=a}}};
"undefined"!=typeof module&&module.exports&&(module.exports=sjcl);
sjcl.bitArray={bitSlice:function(a,b,c){a=sjcl.bitArray.g(a.slice(b/32),32-(b&31)).slice(1);return void 0===c?a:sjcl.bitArray.clamp(a,c-b)},extract:function(a,b,c){var d=Math.floor(-b-c&31);return((b+c-1^b)&-32?a[b/32|0]<<32-d^a[b/32+1|0]>>>d:a[b/32|0]>>>d)&(1<<c)-1},concat:function(a,b){if(0===a.length||0===b.length)return a.concat(b);var c=a[a.length-1],d=sjcl.bitArray.getPartial(c);return 32===d?a.concat(b):sjcl.bitArray.g(b,d,c|0,a.slice(0,a.length-1))},bitLength:function(a){var b=a.length;return 0===
b?0:32*(b-1)+sjcl.bitArray.getPartial(a[b-1])},clamp:function(a,b){if(32*a.length<b)return a;a=a.slice(0,Math.ceil(b/32));var c=a.length;b&=31;0<c&&b&&(a[c-1]=sjcl.bitArray.partial(b,a[c-1]&2147483648>>b-1,1));return a},partial:function(a,b,c){return 32===a?b:(c?b|0:b<<32-a)+0x10000000000*a},getPartial:function(a){return Math.round(a/0x10000000000)||32},equal:function(a,b){if(sjcl.bitArray.bitLength(a)!==sjcl.bitArray.bitLength(b))return!1;var c=0,d;for(d=0;d<a.length;d++)c|=a[d]^b[d];return 0===
c},g:function(a,b,c,d){var e;e=0;for(void 0===d&&(d=[]);32<=b;b-=32)d.push(c),c=0;if(0===b)return d.concat(a);for(e=0;e<a.length;e++)d.push(c|a[e]>>>b),c=a[e]<<32-b;e=a.length?a[a.length-1]:0;a=sjcl.bitArray.getPartial(e);d.push(sjcl.bitArray.partial(b+a&31,32<b+a?c:d.pop(),1));return d},j:function(a,b){return[a[0]^b[0],a[1]^b[1],a[2]^b[2],a[3]^b[3]]}};
sjcl.codec.base32={e:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",fromBits:function(a,b){var c="",d,e=0,g=sjcl.codec.base32.e,f=0,k=sjcl.bitArray.bitLength(a);for(d=0;5*c.length<k;)c+=g.charAt((f^a[d]>>>e)>>>27),5>e?(f=a[d]<<5-e,e+=27,d++):(f<<=5,e-=5);for(;c.length&5&&!b;)c+="=";return c},toBits:function(a){a=a.replace(/\s|=/g,"").toUpperCase();var b=[],c,d=0,e=sjcl.codec.base32.e,g=0,f;for(c=0;c<a.length;c++){f=e.indexOf(a.charAt(c));if(0>f)throw new sjcl.exception.invalid("this isn't base32!");27<d?(d-=
27,b.push(g^f>>>d),g=f<<32-d):(d+=5,g^=f<<32-d)}d&56&&b.push(sjcl.bitArray.partial(d&56,g,1));return b}};sjcl.hash.sha1=function(a){a?(this.d=a.d.slice(0),this.b=a.b.slice(0),this.a=a.a):this.reset()};sjcl.hash.sha1.hash=function(a){return(new sjcl.hash.sha1).update(a).finalize()};
sjcl.hash.sha1.prototype={blockSize:512,reset:function(){this.d=this.h.slice(0);this.b=[];this.a=0;return this},update:function(a){"string"===typeof a&&(a=sjcl.codec.utf8String.toBits(a));var b,c=this.b=sjcl.bitArray.concat(this.b,a);b=this.a;a=this.a=b+sjcl.bitArray.bitLength(a);for(b=this.blockSize+b&-this.blockSize;b<=a;b+=this.blockSize)n(this,c.splice(0,16));return this},finalize:function(){var a,b=this.b,c=this.d,b=sjcl.bitArray.concat(b,[sjcl.bitArray.partial(1,1)]);for(a=b.length+2;a&15;a++)b.push(0);
b.push(Math.floor(this.a/0x100000000));for(b.push(this.a|0);b.length;)n(this,b.splice(0,16));this.reset();return c},h:[1732584193,4023233417,2562383102,271733878,3285377520],i:[1518500249,1859775393,2400959708,3395469782]};
function n(a,b){var c,d,e,g,f,k,m,l=b.slice(0),h=a.d;e=h[0];g=h[1];f=h[2];k=h[3];m=h[4];for(c=0;79>=c;c++)16<=c&&(l[c]=(l[c-3]^l[c-8]^l[c-14]^l[c-16])<<1|(l[c-3]^l[c-8]^l[c-14]^l[c-16])>>>31),d=19>=c?g&f|~g&k:39>=c?g^f^k:59>=c?g&f|g&k|f&k:79>=c?g^f^k:void 0,d=(e<<5|e>>>27)+d+m+l[c]+a.i[Math.floor(c/20)]|0,m=k,k=f,f=g<<30|g>>>2,g=e,e=d;h[0]=h[0]+e|0;h[1]=h[1]+g|0;h[2]=h[2]+f|0;h[3]=h[3]+k|0;h[4]=h[4]+m|0}
sjcl.misc.hmac=function(a,b){this.f=b=b||sjcl.hash.sha256;var c=[[],[]],d,e=b.prototype.blockSize/32;this.c=[new b,new b];a.length>e&&(a=b.hash(a));for(d=0;d<e;d++)c[0][d]=a[d]^909522486,c[1][d]=a[d]^1549556828;this.c[0].update(c[0]);this.c[1].update(c[1])};sjcl.misc.hmac.prototype.encrypt=sjcl.misc.hmac.prototype.mac=function(a){a=(new this.f(this.c[0])).update(a).finalize();return(new this.f(this.c[1])).update(a).finalize()};

计算Gcode JS:

(function () {function HOTP(K, C){var key = sjcl.codec.base32.toBits(K);// Count is 64 bits long.  Note that JavaScript bitwise operations make// the MSB effectively 0 in this case.var count = [((C & 0xffffffff00000000) >> 32), C & 0xffffffff];var otplength = 6;var hmacsha1 = new sjcl.misc.hmac(key, sjcl.hash.sha1);var code = hmacsha1.encrypt(count);var offset = sjcl.bitArray.extract(code, 152, 8) & 0x0f;var startBits = offset * 8;var endBits = startBits + 4 * 8;var slice = sjcl.bitArray.bitSlice(code, startBits, endBits);var dbc1 = slice[0];var dbc2 = dbc1 & 0x7fffffff;var otp = dbc2 % Math.pow(10, otplength);var result = otp.toString();while (result.length < otplength){result = '0' + result;}return result}function GenerateTOTP() {var Gkeys = document.getElementsByClassName('Gkey')[0].value;var Gcodes = document.getElementsByClassName('Gcode')[0];var ctime = Math.floor((new Date() - 0) / 30000);var code = HOTP(Gkeys, ctime);Gcodes.innerText = code}function ConfigureHandlers(){setInterval(GenerateTOTP, 1500);}GenerateTOTP();ConfigureHandlers();})();

HTML页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Google Authenticator</title><style>.Gcode{color: red}    </style>
</head>
<body><p><h3>计算Google Code</h3><input type="text" class="Gkey" value='XXXXXXXXXXXXXX'><P><span class='Gcode' id="GCSCODE"></span></P></p><script src="sjcl.js"></script><script src="code_totp.js"></script></body>
</html>

代码

https://github.com/gbraad/gauth

在线版

  • gauth.cpp.la
  • gauth.apps.gbraad.nl(备用)

vbs版

VBScript Google Authenticator Algorithm

javascript版谷歌身份验证器google authenticator相关推荐

  1. 如何为SSH登录建立双因子验证机制(谷歌身份验证器)?

    前言 默认情况下,SSH已经在远程机器之间使用安全的数据通信;但是如果你想为自己的SSH连接添加另外某种安全层,可以添加谷歌身份验证器(Google Authenticator)双因子验证模块,该模块 ...

  2. 【SpringBoot】61、SpringBoot中使用谷歌身份验证器(Google Authenticator)实现二步身份验证

    Google 身份验证器 Google Authenticator 是谷歌推出的基于时间的一次性密码 (Time-based One-time Password,简称 TOTP),只需要在手机上安装该 ...

  3. 使用C++实现谷歌身份验证器(Google Authenticator)

    使用C++实现谷歌身份验证器(Google Authenticator) 本机环境: windows10 x64位运行环境 1.进入网站:http://slproweb.com/products/Wi ...

  4. 使用谷歌身份验证器(Google Authenticator)保护你的后台

    为何要使用谷歌身份验证器 普通的网站只使用账号.密码.图形验证码进行后台登录.根据我(作为站长)多年的经验来看,这种方式安全性很低,尤其是使用 http 协议,明文的帐号和密码相当于在网络上裸奔.如果 ...

  5. Google Authenticator windows client 谷歌身份验证器 windows 电脑端

    谷歌身份验证器现在有安卓客户端和ios客户端,本人开发了一个windows客户端,基于 .NETFramework v4.7 开发,已在 github 上开源,可以在 github 上直接下载. gi ...

  6. google authenticator python_谷歌验证器(Google Authenticator)

    双因素身份认证就是经过你所知道再加上你所能拥有的这二个要素组合到一块儿才能发挥做用的身份认证系统.双因素认证是一种采用时间同步技术的系统,采用了基于时间.事件和密钥三变量而产生的一次性密码来代替传统的 ...

  7. google authenticator python_谷歌验证器 Google Authenticator工作原理

    很多人都听过谷歌验证 (Google Authenticator) 或用过谷歌验证 (Google Authenticator) .尤其是随着比特币等虚拟货币的兴起,各大交易所都要求绑定谷歌验证 (G ...

  8. 使用谷歌身份验证器增强SSH安全

    一般大家都是使用账号和密码远程SSH登录管理服务器.但SSH账号和密码很容易泄露,或者经常遭遇暴力破解.咨询过前同事赛赛,他们目前使用了谷歌身份验证器.查看了谷歌身份验证器的github和其它网上文档 ...

  9. 二次验证码小程序与谷歌身份验证器不同点是?

    名称1[二次验证码]小程序 名称2 谷歌身份验证器(Google Authenticator) 粗略对比两个产品异同 [二次验证码]小程序 搜索:微信搜索.微信目前65个小程序入口,倒是容易找到它 使 ...

最新文章

  1. 【斗医】【18】Web应用开发20天
  2. Python 数据类型及其用法
  3. linux shell脚本 wget,bash – 在shell脚本中运行wget和其他命令
  4. arcgis dem栅格立体感_如何使用ArcGIS从DEM数据中提取水系
  5. C语言高级编程:结构体中定义数组的“妙用”
  6. platform_set_drvdata和platform_get_drvdata用法【转】
  7. 基于 Python 自建分布式高并发 RPC 服务
  8. [译] 如何用ps制作泼水字
  9. nvidia-rapids︱cuDF与pandas一样的DataFrame库
  10. 物流管理系统c语言程序设计,C语言程序设计物流管理系统.doc
  11. 声网 视频通话SDK小结
  12. Arduino /*传感器使用指南
  13. SovitChart工具1分钟快速开发前端统计图表
  14. 云计算基础与应用 第二章 云计算技术架构
  15. APT,EPT,ET,DPD含义与理解
  16. 一文看懂推荐系统:概要01:推荐系统的基本概念
  17. 实习每日总结_20161222
  18. MYSQL优化之碎片整理
  19. 如何从抖音引流至微信小程序?
  20. 关于Raphael开发过程中的一些总结

热门文章

  1. 关于卷积神经网络的书籍,卷积神经网络基础知识
  2. Java语言实现经典游戏俄罗斯方块
  3. 1、STM32CubeMX和STM32Cube库(HAL)详细介绍
  4. 开源自主导航小车MickX4(七)cartographer 室外3D建图
  5. Yolov5 windows下的环境搭建及训练
  6. 会声会影实操项目流程
  7. 【C语言】打印数字金字塔
  8. 云上省钱新玩法 教你如何优惠与灵活兼得
  9. C语言数据类型和表达式
  10. js函数求两个数的和