安全加密--谷歌验证码

谷歌验证码通常指的是谷歌为了增强用户账户安全性等目的而使用的验证码,常见的有谷歌验证码(Google CAPTCHA)和谷歌身份验证器验证码(Google Authenticator Code),以下是关于它们的详细介绍:

谷歌验证码(Google CAPTCHA)

  • 概述: 也称为 reCAPTCHA,是一种用于区分用户是人类还是机器人的工具。它通过让用户完成一些简单的验证任务,来确保网站的安全性,防止恶意机器人自动提交表单、注册账号等操作。
  • 常见类型
    • 图片验证码: 用户需要从一组图片中选择符合特定要求的图片,比如从若干张图片中选择出所有包含汽车的图片。
    • 文字验证码: 要求用户输入图片中显示的扭曲、变形的文字内容。
    • 无感知验证码: 在用户无感知的情况下,通过分析用户的行为特征,如鼠标移动轨迹、点击频率等,来判断是否为机器人。
  • 应用场景: 广泛应用于各种网站和在线服务,如谷歌账号注册、登录页面,以及许多使用谷歌验证服务的第三方网站的注册、登录、评论、投票等功能中。

谷歌身份验证器验证码(Google Authenticator Code)

  • 概述: 是谷歌推出的一款用于两步验证的应用程序生成的验证码。它基于时间同步的一次性密码(TOTP)算法,每 30 秒会生成一个新的 6 位或 8 位数字验证码。
  • 工作原理: 用户在手机上安装谷歌身份验证器应用后,将其与自己的谷歌账号或其他支持该验证方式的账号绑定。绑定过程中,应用会生成一个唯一的密钥。此后,当用户登录账号时,除了输入用户名和密码外,还需要输入谷歌身份验证器应用当前显示的验证码,以证明是用户本人在操作。
  • 应用场景: 主要用于谷歌账号以及许多其他支持两步验证的网站和应用的登录过程,如银行账户、社交媒体账号等,以增加账号的安全性,防止账号被盗用。

开启谷歌身份验证器验证码的流程

  1. 下载安装谷歌身份验证器: 在手机的应用商店(如苹果 App Store 或安卓应用市场)中搜索 “谷歌身份验证器”,下载并安装该应用。
  2. 登录谷歌账号并进入安全设置: 打开浏览器,访问谷歌账号管理页面,登录您的谷歌账号。点击 “安全性” 选项,找到 “两步验证”。
  3. 开始设置两步验证: 点击 “开始” 按钮,系统会要求再次输入谷歌账号密码进行验证。
  4. 验证手机号码: 输入您的手机号码,格式为国家代码加手机号,如中国为 “+8613800000000”。谷歌会向该手机号发送验证码,输入收到的验证码完成手机验证。
  5. 设置身份验证器: 页面向下滑动找到 “身份验证器” 选项,点击 “设置身份验证器”,会出现一个二维码和密钥。
  6. 添加账户到验证器: 打开手机上安装好的谷歌身份验证器应用,点击 “+” 图标或 “添加新账户”,选择 “扫描二维码”,使用手机摄像头扫描上一步中谷歌账号设置页面显示的二维码;如果无法扫码,也可以选择 “无法扫码” 手动输入密钥。
  7. 完成绑定: 扫描或输入密钥成功后,谷歌身份验证器会生成一个 6 位数字的一次性验证码,在谷歌账号设置页面输入该验证码,即可完成谷歌身份验证器的开启。

项目中使用谷歌验证码

  • 以下是基于时间的一次性密码(TOTP)生成的函数
// 将 YOUR_SECRET_KEY 替换为管理控制台获取的密钥。
const website = {
	ggAuth: 'YOUR_SECRET_KEY'
}
// 该函数用于计算当前时间戳对应的时间步数。它将当前时间(以毫秒为单位)转换为秒,然后除以 30,得到一个以 30 秒为间隔的时间步数。这是 TOTP 算法中常用的时间间隔。
function epoch () {
  return Math.floor(new Date().valueOf() / 1000 / 30)
}

// 核心函数,用于生成一次性密码。
function auth (K, t) {
  // 自定义的 SHA-1 哈希算法实现。SHA-1 是一种加密哈希函数,用于将任意长度的数据转换为固定长度(160 位)的哈希值。该函数内部使用了位运算和循环来模拟 SHA-1 算法的计算过程
  function sha1 (C) {
    function L (x, b) {
      return x << b | x >>> 32 - b
    }
    var l = C.length
    var D = C.concat([1 << 31])
    var V = 0x67452301
    var W = 0x88888888
    var Y = 271733878
    var X = Y ^ W
    var Z = 0xC3D2E1F0
    W ^= V
    do D.push(0); while (D.length + 1 & 15)
    D.push(32 * l)
    while (D.length) {
      var E = D.splice(0, 16)
      var a = V
      var b = W
      var c = X
      var d = Y
      var e = Z
      var f; var k; var i = 12

      function I (x) {
        var t = L(a, 5) + f + e + k + E[x]
        e = d
        d = c
        c = L(b, 30)
        b = a
        a = t
      }
      for (; ++i < 77;) E.push(L(E[i] ^ E[i - 5] ^ E[i - 11] ^ E[i - 13], 1))
      k = 0x5A827999
      for (i = 0; i < 20; I(i++)) f = b & c | ~b & d
      k = 0x6ED9EBA1
      for (; i < 40; I(i++)) f = b ^ c ^ d
      k = 0x8F1BBCDC
      for (; i < 60; I(i++)) f = b & c | b & d | c & d
      k = 0xCA62C1D6
      for (; i < 80; I(i++)) f = b ^ c ^ d
      V += a
      W += b
      X += c
      Y += d
      Z += e
    }
    return [V, W, X, Y, Z]
  }
  var k = []
  var l = []
  var i = 0
  var j = 0
  var c = 0
  for (; i < K.length;) {
    c = c * 32 + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'.indexOf(K.charAt(i++).toUpperCase())
    if ((j += 5) > 31) k.push(Math.floor(c / (1 << (j -= 32)))), c &= 31
  }
  j && k.push(c << (32 - j))
  for (i = 0; i < 16; ++i) l.push(0x6A6A6A6A ^ (k[i] = k[i] ^ 0x5C5C5C5C))
  var s = sha1(k.concat(sha1(l.concat([0, t]))))
  var o = s[4] & 0xF
  var r = ((s[o >> 2] << 8 * (o & 3) | (o & 3 ? s[(o >> 2) + 1] >>> 8 * (4 - o & 3) : 0)) & -1 >>> 1) % 1000000
  r = r.toString()
  while (r.length < 6) {
    r = '0' + r
  }
  return r
}

export const getGoogleCode = function () {
  const code = website.ggAuth
  return auth(code, epoch())
}

将getGoogleCode()函数返回的谷歌验证码添加到对应的登录请求参数中

谷歌验证码是谷歌为保障网络安全和用户账户安全而采取的重要措施,在网络安全领域发挥着重要作用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值