.:. 草榴社區 » 技術討論區 » 浅谈论坛二次验证原理以及本地如何实现
--> 本頁主題: 浅谈论坛二次验证原理以及本地如何实现 字體大小 寬屏顯示 只看樓主 最新點評 熱門評論 時間順序
梁家河学霸


級別:騎士 ( 10 )
發帖:769
威望:354 點
金錢:21597 USD
貢獻:1958 點
註冊:2024-04-16


浅谈论坛二次验证原理以及本地如何实现


免费上门,穴痒,水都流出来了!
xu75a0.vip
御姐,网红,模特,萝莉,少女 少妇任君挑选
xu75a0.vip
AD

      本人在某大型国企混日子,涉及到工作主要为信息技术方面,俗称码农。前段时间,公司某人邮箱账号密码被盗,大晚上给全集团公司发钓鱼诈骗邮件。某些个员工真就上当了,上当就上当吧,结果还报警了,肯定留下报警记录。哎,年末大领导去国资委述职,少不了要被点名这次不光彩的事了。部门领导很生气,就找上我们这些底层了,要加强信息安全,准备信息安全材料,全公司上上下下学习,其中就涉及到相关二次验证的方面。这里就把Google二次验证的修改一下搬运过来。
    二次验证的原理是一种双重认证机制,旨在提高账户的安全性,防止因密码泄露而导致的未经授权访问。以Google为例,它使用的OTP(One-Time Password)通常基于TOTP(Time-Based One-Time Password)或者HOTP(HMAC-Based One-Time Password)标准。通常采用TOTP。其原理如下:TOTP使用一个共享密钥当前时间戳生成一个一次性密码。这个验证码通常每30秒或60秒更新一次,确保其短暂有效性,增加了安全性。其核心公式如下(百度吧,这公式实在不好打)
                                       
    其步骤如下:
                                 

    下面是python实现的代码:
     
複製代碼
  1. import time
  2. import hmac
  3. import base64
  4. import struct
  5. import hashlib
  6. def generate_totp(secret, interval=30, digits=6):
  7.     # Step 1: 将密钥解码成字节
  8.     key = base64.b32decode(secret, True)
  9.     # Step 2: 获取当前时间戳并计算时间步长
  10.     current_time = int(time.time() / interval)
  11.     # Step 3: 将时间步长转换为8字节的二进制数据
  12.     msg = struct.pack(">Q", current_time)
  13.     # Step 4: 计算HMAC-SHA1
  14.     hmac_hash = hmac.new(key, msg, hashlib.sha1).digest()
  15.     # Step 5: 动态截断
  16.     offset = hmac_hash[-1] & 0x0F  # 获取HMAC的最后一个字节的低4位
  17.     binary_code = struct.unpack(">I", hmac_hash[offset:offset + 4])[0] & 0x7FFFFFFF  # 截取31位
  18.     # Step 6: 取模,生成6位验证码
  19.     otp = binary_code % (10 ** digits)
  20.     return str(otp).zfill(digits)
  21. # 示例:生成TOTP验证码
  22. secret = "JBSWY3DPEHPK3PXP"  # 示例密钥,实际应用中应为每个用户生成唯一密钥
  23. totp_code = generate_totp(secret)
  24. print(f"当前的TOTP验证码是: {totp_code}")
複製代碼



    那么,针对1024社区而言,当你点击开启二次验证是,服务器会给你一个16位的随机密钥,一定要牢记。一定要牢记。一定要牢记。这个时候服务器端会给将这个密钥记录下来,然后你打开二次验证APP,将这个密钥输进去,然后密钥结合当前时间戳基于TOTP生成一个6位数的一次性密码,当你将这个一次性密码上传给服务器时,服务器也会通过相同的TOTP算法计算得到一个一次性6位密码,两者匹配成功,即获得验证。另外一点,无需担心你的二次验证APP故障,因为基于TOTP算法国际统一,只要任意一个基于TOTP算法得到结果都是一样的,包括我上面提供的代码,计算获得的一次性密码全都一样。因此,只要记牢你的那个16位随机密钥就行。


          这里原理其实很简单,主要让不了解的人了解。毕竟人们对熟悉的事物有一种天然的信任和倾向,在很多情况下,用户更愿意接受自己理解的东西。最后,一定要熟记自己的随机密钥,一定要熟记自己的随机密钥,一定要熟记自己的随机密钥。


赞(80)
DMCA / ABUSE REPORT | TOP Posted: 2024-09-27 02:45 樓主 引用 | 發表評論
凸起凸起


級別:禁止發言 ( 8 )
發帖:2335
威望:25 點
金錢:15580 USD
貢獻:329 點
註冊:2022-02-09

PG电子正版官方 麻将糊了
546cuj532ppp.vip
兼职小姐,全国上门服务小姐上门,全国空降,学生少妇,应有尽有,立即预约
ea22u2.vip
AD

刚刚二次验证通过了,确实比之前安全了 
TOP Posted: 2024-09-27 02:50 #1樓 引用 | 點評
麋鹿啾啾


級別:騎士 ( 10 )
發帖:909
威望:211 點
金錢:793 USD
貢獻:4510 點
註冊:2022-09-11

好的,我学会了.


點評

TOP Posted: 2024-09-27 02:55 #2樓 引用 | 點評
要用中文名


級別:禁止發言 ( 8 )
發帖:2481
威望:274 點
金錢:132299 USD
貢獻:0 點
註冊:2022-04-03

楼主可否科普一点,用户的随机密钥如何保存在网站能确保安全不会被窃取?如果网站数据库被攻破,密钥也泄露,那么二次验证也就没有意义了。


點評

  • 电动小火车  赞(1)
    简单点儿:登录密码+随机密钥(再生成6位短暂密码),除非这两个都被泄露了。那这个号就是别人的了。 2024-09-27 09:18
  • 要用中文名 层主电动小火车  赞(0)
    谢答。楼主23楼也答复了。我的问题其实是怕网站自己泄露了密钥,而不是用户自己。 2024-09-27 09:47
TOP Posted: 2024-09-27 02:58 #3樓 引用 | 點評
lyy121


級別:騎士 ( 10 )
發帖:4359
威望:419 點
金錢:16570 USD
貢獻:8964 點
註冊:2011-12-17

科普贴,支持了
TOP Posted: 2024-09-27 03:00 #4樓 引用 | 點評
sun1314


級別:俠客 ( 9 )
發帖:1900
威望:206 點
金錢:4153 USD
貢獻:1 點
註冊:2016-10-27

感谢分享
TOP Posted: 2024-09-27 03:02 #5樓 引用 | 點評
岸上人


級別:禁止發言 ( 8 )
發帖:755
威望:76 點
金錢:883 USD
貢獻:0 點
註冊:2024-05-03

1024


點評

TOP Posted: 2024-09-27 03:03 #6樓 引用 | 點評
派大星一起嗨


級別:光明使者 ( 14 )
發帖:32204
威望:47629 點
金錢:18248 USD
貢獻:1024 點
註冊:2022-07-03
認證: 技術區認證會員
2022-11-23

感谢分享,看不懂选手路过~
------------------------
若将岁月开成花,人生何处不芳华


點評

TOP Posted: 2024-09-27 03:03 #7樓 引用 | 點評
小小黄鸭


級別:聖騎士 ( 11 )
發帖:6781
威望:714 點
金錢:12762 USD
貢獻:0 點
註冊:2022-07-04

最简单直接的方法,就是身边有个懂电脑的朋友
TOP Posted: 2024-09-27 03:06 #8樓 引用 | 點評
阳朔七堆山


級別:俠客 ( 9 )
發帖:239
威望:140 點
金錢:956 USD
貢獻:700 點
註冊:2024-08-16

服务器会给你一个16位的随机密钥——这个也泄露了怎么办?


點評

TOP Posted: 2024-09-27 03:10 #9樓 引用 | 點評
坏兔子


級別:新手上路 ( 8 )
發帖:269
威望:27 點
金錢:1644 USD
貢獻:0 點
註冊:2018-09-18

感谢分享
TOP Posted: 2024-09-27 03:19 #10樓 引用 | 點評
wjsygxbt


級別:精靈王 ( 12 )
發帖:1242
威望:145 點
金錢:100096 USD
貢獻:50593 點
註冊:2019-09-05

全国性息在线下载 酒店家庭监控88台实时观看
360.bxgdnr.cn
安全 无毒 全网独家稀缺资源 免费看
pse.is/785zly
AD

没有绝对安全  只有相对安全而已
TOP Posted: 2024-09-27 03:30 #11樓 引用 | 點評
棒棒达人


級別:精靈王 ( 12 )
發帖:10873
威望:1088 點
金錢:8431 USD
貢獻:50 點
註冊:2018-09-10

感谢分享!
TOP Posted: 2024-09-27 03:33 #12樓 引用 | 點評
月亮上的猪


級別:騎士 ( 10 )
發帖:1377
威望:320 點
金錢:11449 USD
貢獻:300 點
註冊:2021-11-07

慌得我赶紧去找我自己的随机密钥去了
TOP Posted: 2024-09-27 04:02 #13樓 引用 | 點評
起飞的叽叽


級別:騎士 ( 10 )
發帖:3114
威望:312 點
金錢:176057 USD
貢獻:5 點
註冊:2019-02-01

感谢分享
TOP Posted: 2024-09-27 04:09 #14樓 引用 | 點評
布拉德·皮特


級別:精靈王 ( 12 )
發帖:4177
威望:628 點
金錢:11773 USD
貢獻:22400 點
註冊:2024-02-10

感谢科普
TOP Posted: 2024-09-27 04:12 #15樓 引用 | 點評
放弃也是爱


級別:騎士 ( 10 )
發帖:2311
威望:377 點
金錢:12682 USD
貢獻:0 點
註冊:2019-06-05

感谢分享
TOP Posted: 2024-09-27 04:38 #16樓 引用 | 點評
一片月临城


級別:精靈王 ( 12 )
發帖:14942
威望:2230 點
金錢:7824 USD
貢獻:4925 點
註冊:2021-05-04

PG、电子、棋牌、真人、彩票体育!注册免费送最高188!全网唯一真实无条件发工资!本站推荐!
0158za.com
8年老平台,一对一人工筛选
npjgg576.com
AD

感谢科普
TOP Posted: 2024-09-27 05:20 #17樓 引用 | 點評
第一女流氓


級別:新手上路 ( 8 )
發帖:729
威望:92 點
金錢:1096947 USD
貢獻:1 點
註冊:2020-02-08

1024
TOP Posted: 2024-09-27 05:23 #18樓 引用 | 點評
巴黎伯伯


級別:騎士 ( 10 )
發帖:5278
威望:528 點
金錢:5720 USD
貢獻:0 點
註冊:2021-10-16

感谢分享
TOP Posted: 2024-09-27 05:26 #19樓 引用 | 點評
梁家河学霸 [樓主]


級別:騎士 ( 10 )
發帖:769
威望:354 點
金錢:21597 USD
貢獻:1958 點
註冊:2024-04-16

回复楼上的,怎么变到这里了


[ 此貼被梁家河学霸在2024-09-27 15:30重新編輯 ]
TOP Posted: 2024-09-27 06:53 #20樓 引用 | 點評
条野佑长佐


級別:聖騎士 ( 11 )
發帖:2605
威望:467 點
金錢:694 USD
貢獻:17178 點
註冊:2022-05-21

老实说,看起来安全,只有一个密码,人脑能记住(每个人的密码都有其个人规律),唯一担心就是木马键盘记录。而二次验证码,密钥人脑无法记忆,只能保存在本机,或备份在不同地方,这样反而提高了丢失风险。
相当于一个老人家,设计一个复杂的密码,自己记不住,每次输入都要拿出纸条,对着输入。
TOP Posted: 2024-09-27 07:25 #21樓 引用 | 點評
梁家河学霸 [樓主]


級別:騎士 ( 10 )
發帖:769
威望:354 點
金錢:21597 USD
貢獻:1958 點
註冊:2024-04-16

引用
引用第3樓要用中文名於2024-09-27 10:58發表的 :
楼主可否科普一点,用户的随机密钥如何保存在网站能确保安全不会被窃取?如果网站数据库被攻破,密钥也泄露,那么二次验证也就没有意义了。

额,用户的随机密钥一般通过一个对称密钥加密后存到数据库中,比如你的随机密钥是123456这是你看到的。但保存到数据库的可能就是经过对称加密后的一个长度为32位的随机字符串。一般情况下,这个对称密钥会定时更新。所以即使攻破数据库也没什么用,除非数据库设计者缺乏安全远见,直接明文将密码123456保存到数据库里


點評

  • 要用中文名  赞(1)
    谢解惑。现在泄密多了,弱智的做法应该很少了,如明文保存密码等。如果网站只保存加密后的密钥,则二次验证方法还是可以信赖的。我想,平常业务中常碰到在不同沟通平台难以实时确认来自各时区客户身份的问题,或可参考这思路解决。 2024-09-27 07:44
TOP Posted: 2024-09-27 07:28 #22樓 引用 | 點評
五部初段


級別:俠客 ( 9 )
發帖:2466
威望:248 點
金錢:94 USD
貢獻:301 點
註冊:2018-09-17

全网PG,电子最高爆率平台,体育赛事投注包赔1088,棋牌彩票应有尽有
3og.cc
华人高端约炮平台全国可约,不满意免费换
ea22u2.vip
AD

我来给个简单版的
import pyotp

def get_variable(secret):
    # 使用提供的密钥
    secret = secret.replace(" ", "")
    # 创建基于TOTP的对象
    totp = pyotp.TOTP(secret)

    return totp.now()


點評

TOP Posted: 2024-09-27 07:42 #23樓 引用 | 點評
mol0


級別:新手上路 ( 8 )
發帖:13
威望:2 點
金錢:63 USD
貢獻:0 點
註冊:2015-07-08

感谢科普感谢分享
TOP Posted: 2024-09-27 07:47 #24樓 引用 | 點評

.:. 草榴社區 -> 技術討論區

快速回帖 頂端
內容
HTML 代碼不可用

使用簽名
Wind Code自動轉換

按 Ctrl+Enter 直接提交