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

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

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

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

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

import hmac
import hashlib
import time
import base64def 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_base64def 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 base64def 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] & 15h = (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.mzph.cn/news/865825.shtml

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

相关文章

万字详解AI开发中的数据预处理(清洗)

数据清洗(Data Cleaning)是通过修改、添加或删除数据的方式为数据分析做准备的过程,这个过程通常也被称为数据预处理(Data Preprocessing)。对于数据科学家和机器学习工程师来说,熟练掌握数据清洗全流程至关…

21_硬件电路基础

目录 组合逻辑电路 组合逻辑电路原理 真值表 布尔代数 门电路 译码器 发光二极管LED 液晶字符显示器LCD 数据选择器 数据分配器 多路开关 时序逻辑电路 时序逻辑电路原理 时钟信号 触发器 电位触发方式触发器 边沿触发方式触发器 寄存器 移位器 计数器 总线…

经营人心:Mrs. B的百年传奇

这个故事的主角是Rose Blumkin,也被称为Mrs. B,她是Nebraska Furniture Mart的创始人。 她的故事确实是一个关于用户思维、客户关系和创业精神的经典案例。 Rose Blumkin于1893年出生在俄罗斯的一个小村庄,她在1921年移民到美国。 1937年&…

NEEP-EN2-2019-Text1

英二-2019-Text1摘自大西洋月刊《The Atlantic》2018年4月的一篇名为“When Guilt is Good”的文章。 以下为个人解析,非官方公开标准资料,可能有误,仅供参考。(单词解释仅摘出部分词性和意思) Paragraph 1 Unlike s…

微信小程序利用第三方库xlsx导出excel

微信小程序导出excel 微信小程序利用第三方库xlsx导出excel: 参考: https://blog.csdn.net/weixin_57263939/article/details/128905216 https://blog.csdn.net/gao511147456/article/details/132009965 另外: 微信小程序中pdf的上传、下载及…

ImportError cannot import name ‘uic‘ from ‘PyQt5‘

ImportError cannot import name ‘uic’ from ‘PyQt5’ 1、描述 使用nuitka把PyQt5打包exe文件时报错: ImportError cannot import name ‘uic’ from ‘PyQt5’ 2、原因 这个是由于无法找到uic的目录导致的,在PyQt5的目录下是有uic文件的。 3、解决方案 找到导入uic…

SQL Server 2022的组成

《SQL Server 2022从入门到精通(视频教学超值版)》图书介绍-CSDN博客 SQL Server 2022主要由4部分组成,分别是数据库引擎、分析服务、集成服务和报表服务。本节将详细介绍这些内容。 1.2.1 SQL Server 2022的数据库引擎 SQL Server 2022的…

NGINX+KEEPALIVED | 一文搞懂NG+KL负载均衡高可用架构的实操教程(详细)

文章目录 NGINXKEEPALIVED负载均衡高可用架构为什么需要多节点应用为什么需要Nginx服务为什么需要Keepalived服务NGKL简述前期准备Linux服务器公共环境配置Server1 NGKL服务器配置Server2 NGKL服务器配置Server3 HTTP服务器配置Server4 HTTP服务器配置运行测试用例 NGINXKEEPAL…

C# winform中权限页面的设计和开发

在C# WinForm应用中设计和开发权限页面,主要涉及到用户界面的创建、数据模型的构建以及业务逻辑的实现。以下是一个基本的步骤,可用来参考构建一个权限管理页面: 第一步:设计用户界面 创建一个新的WinForm:在Visual S…

CPU/内存/综合性能评估工具汇总-1:lmbench

目录 一、概括二、lmbench 一、概括 嵌入式开发中对要设计的产品、立项的项目进行设计时,往往需要对关键芯片进行性能评估,本文主要总结基于linux系统的产品在性能评估时的工具使用总结,在aarch64(arm64平台下测试),板卡根文件系…

使用Keil将STM32部分程序放在RAM中运行

手动分配RAM区域,新建.sct文件,定义RAM_CODE区域,并指定其正确的起始地址和大小。 ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************…

C语言 -- 函数

C语言 -- 函数 1. 函数的概念2. 库函数2.1 标准库和头文件2.2 库函数的使用方法2.2.1 功能2.2.2 头文件包含2.2.3 实践2.2.4 库函数文档的一般格式 3. 自定义函数3.1 函数的语法形式3.2 函数的举例 4. 形参和实参4.1 实参4.2 形参4.3 实参和形参的关系 5. return 语句6. 数组做…

第二十九章 面向对象(Python)

文章目录 一、面向过程二、面向对象1、对象2、类3、类与对象的关系 一、面向过程 面向过程编程(POP):按照业务逻辑从上到下设计程序的方式。 特点: 用一长段代码来实现指定功能,一步接一步,环环相扣。 缺点…

Element中的消息提示组件Message和弹框组件MessageBox

简述:在 Element UI 中,Message和MessageBox都是比较常用的组件,Message用来提示消息,而MessageBox是一个用于创建模态对话框的组件。它可以用于在页面上快速展示信息、警告或错误提示,而不会阻止用户的其他操作。简单…

速盾:cdn跟bgp

CDN(内容分发网络)和BGP(边界网关协议)是互联网领域中两个重要的技术,它们在不同的层面上提供了网络性能和可用性的优化。本文将重点介绍CDN和BGP的概念、工作原理以及它们在互联网中的应用。 首先,我们来…

116-基于5VLX110T FPGA FMC接口功能验证6U CPCI平台

一、板卡概述 本板卡是Xilinx公司芯片V5系列芯片设计信号处理板卡。由一片Xilinx公司的XC5VLX110T-1FF1136 / XC5VSX95T-1FF1136 / XC5VFX70T-1FF1136芯片组成。FPGA接1片DDR2内存条 2GB,32MB Nor flash存储器,用于存储程序。外扩 SATA、PCI、PCI expres…

【期末复习】数据库系统概论(附带考点汇总)

第1章.绪论 目录 第1章.绪论1.1. 数据库系统概述1.1.1.基本概念1.1.2.产生和发展 1.2.概念模型1.2.1.三种模型1.2.2.概念模型1.2.3.关系模型 1.3.数据库系统结构1.3.1三级模式结构1.3.2.两级映像与数据独立性 第2章.关系型数据库2.1.关系2.2.关系操作2.2.1.基本关系操作2.2.2.关…

SALOME源码分析:View Model

作为一款开源的CAx(CAD/CAE/CAM)软件集成平台,为了实现各个Module支持不同的数据显示与交互方案,出于扩展性的考虑,SALOME引入了View Model,用以支持OpenGL、OCC、VTK、ParaView、Qwt等数据显示与交互实现。 本文将以OCCViewer、…

K8S 加入节点 网络插件flannel问题修复cni plugin not initialized

问题现场 查看kubelet日志 journalctl -xefu kubelet #异常,error: cni plugin not initialized Nov 07 16:12:56 VM-0-5-centos kubelet[2278204]: E1107 16:12:56.747955 2278204 kubelet.go:2855] "Container runtime network not ready" networkRead…

Oracle HTTP Server(OHS)与Oracle数据库的紧密绑定

Oracle HTTP Server(OHS)与Oracle数据库的紧密绑定通常是通过一系列的配置和集成步骤来实现的。以下是这些步骤的详细归纳,包括必要的分点表示和参考信息: 一、安装和配置Oracle HTTP Server 安装OHS: 在安装Oracle…