前后端交互常用的时间敏感算法

news2024/10/5 15:06:51

前后端交互常用的时间敏感算法

前后端交互中涉及时间敏感的算法主要用于确保数据传输的安全性、有效性和同步性。以下是一些常见的时间敏感算法和技术:

1. 基于时间戳的签名算法(HMAC):

描述: HMAC(哈希消息认证码)是一种基于散列函数的消息认证码,通过在消息中添加时间戳,可以防止重放攻击。
应用: 用于API请求的认证和授权。例如,在请求头中包含时间戳和HMAC签名,服务器可以验证请求的时间戳是否在允许的时间窗口内。

import hmac
import hashlib
import time
import base64


def generate_signature(secret_key, message, timestamp):
    # 创建带有时间戳的消息
    message_with_timestamp = f"{message}:{timestamp}"

    # 使用HMAC和SHA256哈希算法生成签名
    signature = hmac.new(secret_key.encode(), message_with_timestamp.encode(), hashlib.sha256).digest()

    # 将签名编码为Base64格式
    signature_base64 = base64.b64encode(signature).decode()

    return signature_base64


def verify_signature(secret_key, message, timestamp, signature, time_window=60):
    # 获取当前时间戳
    current_timestamp = int(time.time())

    # 检查时间戳是否在允许的时间窗口内
    if abs(current_timestamp - int(timestamp)) > time_window:
        return False

    # 生成待验证的签名
    expected_signature = generate_signature(secret_key, message, timestamp)

    # 比较生成的签名和传入的签名是否匹配
    return hmac.compare_digest(expected_signature, signature)


# 使用示例
secret_key = "your_secret_key"
message = "your_message"
timestamp = str(int(time.time()))

# 生成签名
signature = generate_signature(secret_key, message, timestamp)
print(f"Generated Signature: {signature}")

# 验证签名
is_valid = verify_signature(secret_key, message, timestamp, signature)
print(f"Is signature valid? {is_valid}")

# 模拟延迟,测试签名失效
time.sleep(61)
is_valid_expired = verify_signature(secret_key, message, timestamp, signature)
print(f"Is signature valid after delay? {is_valid_expired}")

2. 时间戳防篡改技术:

描述: 在请求或数据中附加时间戳,并使用加密技术确保时间戳的完整性。
应用: 防止数据篡改和重放攻击。例如,支付系统中的交易请求通常会包含一个签名的时间戳。

3. 令牌(Token)过期机制:

描述: 通过设置令牌的有效期来控制其使用时间,过期后需要重新获取新的令牌。
应用: JWT(JSON Web Token)和OAuth等认证授权机制。JWT通常包含一个有效期字段(exp),服务器会验证令牌是否过期。

4. 基于时间的OTP(一次性密码):

描述: TOTP(基于时间的一次性密码)是一种两步验证机制,通过当前时间生成一次性密码,通常每30秒更新一次。
应用: 用于双因素认证(2FA),提高账户安全性。

import time
import hmac
import hashlib
import struct
import base64


def get_totp_token(secret, time_step=30, digits=6):
    # 将密钥解码为字节
    key = base64.b32decode(secret, True)

    # 获取当前时间的步数
    current_time = int(time.time() // time_step)

    # 将时间步数打包为字节格式
    msg = struct.pack(">Q", current_time)

    # 使用HMAC-SHA1算法生成哈希值
    h = hmac.new(key, msg, hashlib.sha1).digest()

    # 提取哈希值的一部分
    o = h[19] & 15
    h = (struct.unpack(">I", h[o:o + 4])[0] & 0x7fffffff)
    print(h)
    # 获取动态密码的数字部分
    token = h % (10 ** digits)

    return str(token).zfill(digits)


# 示例使用
secret = "JBSWY3DPEHPK3PXP"  # 这是一个示例密钥,应为双方共享
token = get_totp_token(secret)
print("TOTP Token:", token)
print(token == '')

5. 时间同步协议(NTP):

描述: NTP(网络时间协议)用于同步计算机系统之间的时钟,以确保前后端在同一个时间基准下运行。
应用: 分布式系统和微服务架构中,确保各个服务之间的时间一致性,防止由于时间不同步引起的错误。

6. 基于时间的缓存策略:

描述: 设置缓存数据的有效期(TTL),确保缓存的数据在特定时间内是有效的。
应用: 前端页面缓存和CDN缓存等,通过设定缓存时间来优化性能并减少服务器负载。

这些时间敏感的算法和技术在实际应用中通常会结合使用,以提供更高的安全性和可靠性。例如,在一个RESTful API的交互过程中,可能会同时使用HMAC签名、时间戳防篡改和令牌过期机制来确保请求的安全性和有效性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1901323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在原有的iconfont.css文件中加入新的字体图标

前言:在阿里图标库中,如果你没有这个字体图标的线上项目,那么你怎么在本地项目中的原始图标文件中添加新的图标呢? 背景:现有一个vue项目,下面是这个前端项目的字体图标文件。现在需要新开发功能页&#x…

论文阅读--Simple Baselines for Image Restoration

这篇文章是 2022 ECCV 的一篇文章,是旷视科技的一篇文章,针对图像恢复任务各种网络结构进行了梳理,最后总结出一种非常简单却高效的网络结构,这个网络结构甚至不需要非线性激活函数。 文章一开始就提到,虽然在图像复原…

DB-GPT-PaperReading

DB-GPT: Empowering Database Interactions with Private Large Language Models 1. 基本介绍 DB-GPT 旨在理解自然语言查询,提供上下文感知响应,并生成高精度的复杂 SQL 查询,使其成为从新手到专家的用户不可或缺的工具。DB-GPT 的核心创新在于其私有 LLM 技术,该技术在…

星辰宇宙动态页面vue版,超好看的前端页面。附源码与应用教程(若依)

本代码的html版本,来源自“山羊の前端小窝”作者,我对此进行了vue版本转换以及相关应用。特此与大家一起分享~ 1、直接上效果图: 带文字版:文字呼吸式缩放。 纯净版: 默认展示效果: 缩放与旋转后&#xf…

【C语言】第四十二弹---一万六千字教你从0到1实现通讯录

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 目录 1、通讯录分析和设计 1.1、通讯录的功能说明 1.2、程序的分析和设计 1.2.1、数据结构的分析 1.2.2、文件结构设计 2、通讯录的结构分析 2.1、创建通…

mysql5.6的安装步骤

1.下载mysql 下载地址:https://downloads.mysql.com/archives/community/ 在这里我们下载zip的包 2.解压mysql包到指定目录 3. 添加my.ini文件 # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.6/en/server-configurat…

docker-compose Install gitlab 17.1.1

gitlab 前言 GitLab 是一个非常流行的开源 DevOps 平台,用于软件开发项目的整个生命周期管理。它提供了从版本控制、持续集成/持续部署(CI/CD)、项目规划到监控和安全的一系列工具。 前提要求 Linux安装 docker docker-compose 参考Windows 10 ,11 2022 docker docker-c…

11.x86游戏实战-汇编指令add sub inc dec

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:10.x86游戏实战-汇编指令lea 首先双击下图红框位置 然后在下图红框位置输入0 然…

瞰景Smart3D使用体验分享

引言 作为一名建筑设计师,我一直在寻找能够提升工作效率和设计质量的软件工具。瞰景Smart3D(Smart3D)是一款备受推崇的3D建模和设计软件,广泛应用于建筑、工程和施工(AEC)行业。经过一段时间的使用&#x…

MySQL表的增删改查(CRUD)

MySQL表的增删改查(CRUD) 文章目录 MySQL表的增删改查(CRUD)1. Create1.1 单行数据 全列插入1.2 多行数据 指定列插入1.3 插入否则更新1.4 替换 2. Retrieve2.1 SELECT 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式…

荞面打造的甜蜜魔法:甜甜圈

食家巷荞面甜甜圈是一款具有特色的美食。它以荞面为主要原料,相较于普通面粉,荞面具有更高的营养价值,富含膳食纤维、维生素和矿物质。荞面甜甜圈的口感可能会更加扎实和有嚼劲,同时带着荞面特有的谷物香气。在制作过程中&#xf…

一款纯 js 实现的大模型应用服务 FastGPT 解读

背景介绍 最近被不同的人安利了 FastGPT 项目,实际上手体验了一下,使用流程类似之前调研过的 Dify, 包含的功能主要是:任务流的编排,知识库管理,另外还有一些外部工具的调用能力。使用页面如下所示: 实际…

游戏服务器搭建选VPS还是专用服务器?

游戏服务器搭建选VPS,VPS能够提供控制、性能和稳定性。它不仅仅是让游戏保持活力。它有助于减少延迟问题,增强您的游戏体验。 想象一下:你正沉浸在一场游戏中。 胜利在望。突然,屏幕卡住——服务器延迟。 很崩溃,对…

Drools开源业务规则引擎(四)- 规则流(rule flow)及手把手教你构建jBPM项目

文章目录 Drools开源业务规则引擎(四)- 规则流(rule flow)及手把手教你构建jBPM项目1.什么是规则流2.构建jBPM项目2.1.添加maven依赖2.2.创建kmodule.xml2.3.新建drl文件和bpmn2文件2.4.测试方法2.5.日志输出 3.Eclipse安装jBPM流…

24西安电子科技大学马克思主义学院—考研录取情况

01、马克思主义学院各个方向 02、24马克思主义学院近三年复试分数线对比 PS:马院24年院线相对于23年院线增加15分,反映了大家对于马克思主义理论学习与研究的热情高涨,也彰显了学院在人才培养、学科建设及学术研究等方面的不断进步与成就。 6…

Apache Seata应用侧启动过程剖析——注册中心与配置中心模块

本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 Apache Seata应用侧启动过程剖析——注册中心与配置中心模块 前言 在Seata的应用侧&#xf…

Docker逃逸CVE-2019-5736、procfs云安全漏洞复现,全文5k字,超详细解析!

Docker容器挂载procfs 逃逸 procfs是展示系统进程状态的虚拟文件系统,包含敏感信息。直接将其挂载到不受控的容器内,特别是容器默认拥有root权限且未启用用户隔离时,将极大地增加安全风险。因此,需谨慎处理,确保容器环…

最适合mysql5.6安装的linux版本-实战

文章目录 一, 适合安装mysql5.6的linu版本1. CentOS 72. Ubuntu 14.04 LTS (Trusty Tahr)3. Debian 8 (Jessie)4. Red Hat Enterprise Linux (RHEL) 7 二, 具体以Ubuntu 14.04 LTS (Trusty Tahr)为例安装虚拟机安装Ubuntu 14.04 LTS (Trusty Tahr) 自己弄安装ssh(便于远程访问,…

入职字节外包2个月后,我离职了...

有一种打工人的羡慕,叫做“大厂”。 真是年少不知大厂香,错把青春插稻秧。 但是,在深圳有一群比大厂员工更庞大的群体,他们顶着大厂的“名”,做着大厂的工作,还可以享受大厂的伙食,却没有大厂…

短视频商城系统源码揭秘:架构设计与实现

在短视频平台和电商平台蓬勃发展的背景下,短视频商城系统应运而生,融合了短视频内容和电商功能,给用户带来了全新的购物体验。本文将揭示短视频商城系统的源码架构设计与实现,帮助开发者了解该系统的内部工作原理及其关键技术。 …