http服务网络请求如何确保数据安全(含python示例源码)
深度学习类文章回顾
【YOLO深度学习系列】图像分类、物体检测、实例分割、物体追踪、姿态估计、定向边框检测演示系统【含源码】
【深度学习】物体检测/实例分割/物体追踪/姿态估计/定向边框/图像分类检测演示系统【含源码】
【深度学习】YOLOV8数据标注及模型训练方法整体流程介绍及演示
【深度学习】行人跌倒行为检测软件系统
【深度学习】火灾检测软件系统
【深度学习】吸烟行为检测软件系统
【深度学习】数竹签演示软件系统
【深度学习】菜品目标检测软件系统
本文链接:http服务网络请求如何确保数据安全(含python示例源码)
1. 本文摘要
- 当今数据安全越来越重要,http网络请求数据安全加强要求是为了保护公民的隐私和数据安全,防范日益复杂的网络攻击,确保电子商务和在线服务的可靠性,并遵守相关法律法规。
- 当前我参与的各类项目,均有安全检测,例如经常检测出的一些问题
- http协议数据传输,需采用校验码技术或密码技术保证重要数据在传输过程中的完整性
- 鉴别信息及重要业务数据采用经国家密码主管部门认可的密码技术,保证其在传输过程中数据的保密性。
- 本文主要介绍在http的传输过程中如何保证数据安全,即:如何确保http请求中数据传输的完整性和传输过程中数据的保密性。
- 本文主要使用python flask来演示整个过程。
本系统所涉及的源码已打包上传。
文中源码文件【获取方式】:关注公众号:利哥AI实例探险
给公众号发送 “http传输安全保密” 获取下载方式
注意发送的关键词不能错,否则匹配不到对应资源,由于本人能力有限,难免有疏漏之处。
2. 实际项目中经常遇到的问题
一般情况下,在我们交付完甲方软件系统后,甲方都会请专业的团队进行漏洞检测,出具《xxx系统漏洞检测报告》,这其中我们经常会遇到的问题如下:
- http协议数据传输,需采用校验码技术或密码技术保证重要数据在传输过程中的完整性。
- 鉴别信息及重要业务数据采用经国家密码主管部门认可的密码技术,保证其在传输过程中数据的保密性。
本文只针对这两类问题,给出一些优化建议。
3. 解决方案
数据的保密性:使用国家密码管理局认可的对称加密算法(如AES)来确保数据的保密性
数据的完整性:可以使用HMAC(哈希消息认证码)来确保数据在传输过程中的完整性
3.1 AES是如何保证数据的保密性的
AES(高级加密标准)对称加密通过以下方式保证数据的保密性:
- 密钥唯一性: AES使用一个唯一的对称密钥,这个密钥必须在发送方和接收方之间保持秘密。如果密钥泄露,任何人都可以解密数据。
- 复杂加密算法: AES算法通过多轮替换和置换操作,将明文数据转换成密文,使得密文难以被破解。
- 初始向量(IV): 在CBC模式中,AES使用一个随机生成的初始向量(IV)进行加密,使相同的明文每次加密得到不同的密文,从而增强了安全性。
- 密钥长度: AES支持128位、192位和256位密钥长度,密钥越长,破解难度越大。
通过以上机制,AES确保了数据在传输过程中的保密性,即使数据被截获,未经授权的一方也无法解密和理解数据。
3.2 随机生成的IV(初始化向量)是如何确保加密的安全性的
- 防止相同明文产生相同密文: 如果使用相同的密钥加密相同的明文,但没有随机IV,那么每次加密的结果将是相同的。这使得攻击者更容易识别和分析重复的模式,从而破坏加密的安全性。随机IV确保即使明文相同,生成的密文也不同。
- 增强密码学强度: IV的随机性增加了加密算法的复杂性,使得攻击者更难以破解。每次加密时生成新的随机IV,确保没有重复,增加了攻击者的工作量。
- 确保初始加密块的随机性: 在使用块加密模式(如CBC模式)时,IV用于加密第一个块。随机IV确保初始块的加密是不可预测的,进一步增强了加密的安全性。
- 防止重放攻击: 在某些情况下,攻击者可能会截获加密的消息并重放它们。使用随机IV确保每个加密会话都是唯一的,从而防止重放攻击。
3.3 哈希消息认证码是如何确保数据传输完整性的
- 哈希函数: HMAC使用一个密码学哈希函数(如SHA-256),将数据和密钥混合生成一个唯一的哈希值。
- 密钥保护: HMAC结合了一个秘密密钥,仅持有该密钥的接收方才能验证数据的完整性,防止中间人篡改数据。
- 签名生成和验证: 发送方在数据传输前计算HMAC并附加到数据上,接收方接收到数据后重新计算HMAC并与传来的HMAC值对比,如果一致,则数据完整无误。
除了使用随机IV确保加密的安全性,还结合了HMAC来确保数据的完整性。每次加密的结果都包含IV和HMAC,接收方使用这些信息验证数据的完整性和解密数据,确保传输过程中的数据既安全又完整。
通过随机IV和HMAC的结合,我们可以实现一个安全的加密传输系统,防止数据被攻击者篡改或重放,确保数据在传输过程中的安全性和完整性。
4. 代码实现示例
- 使用aes加密, AES.new()会自动生成一个随机IV并将其存储在cipher.iv中,SECRET_KEY如果是128位,需要确保是16个字符, 避免引起不必要的异常。这里我们使用的是AES:CBC、BLOCK_SIZE=16、PKCS7填充
import hmac
import hashlib
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
import json
from typing import TupleSECRET_KEY = b'synjones2024zhc1'# 加密函数
def encrypt_data(data: str) -> Tuple[str, str]:cipher = AES.new(SECRET_KEY, AES.MODE_CBC) #ct_bytes = cipher.encrypt(pad(data.encode('utf-8'), AES.block_size)) # BLOCK_SIZE = 16 # 128 bits、默认使用PKCS7填充iv = base64.b64encode(cipher.iv).decode('utf-8')ct = base64.b64encode(ct_bytes).decode('utf-8')# 加密后的密文和IV会被编码并传输return iv, ct
- 使用aes解密
# 解密函数
def decrypt_data(iv: str, ct: str) -> str:try:iv = base64.b64decode(iv)ct = base64.b64decode(ct)cipher = AES.new(SECRET_KEY, AES.MODE_CBC, iv) # 使用CBC模式pt = unpad(cipher.decrypt(ct), AES.block_size) # 使用PKCS7填充return pt.decode('utf-8')except (ValueError, KeyError):return None
3. HMAC生成函数
def generate_hmac(data: str) -> str:return hmac.new(HMAC_KEY, data.encode('utf-8'), hashlib.sha256).hexdigest()
接下来我们来设计整个流程:
- 加密:使用AES对称加密算法进行数据加密,使用随机生成的IV(初始化向量)确保加密的安全性。
- 解密:解密时使用传递过来的IV和加密数据。
- HMAC:使用HMAC-SHA256算法生成消息认证码,确保数据在传输过程中的完整性。使用HMAC进行验证,如果验证失败则返回错误。
- 数据传输:加密后的数据、IV和HMAC值通过JSON格式进行传输。
from flask import Flask, request, jsonify
import hmac
import hashlib
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
import json
from typing import Tupleapp = Flask(__name__)# 共享密钥和HMAC密钥
SECRET_KEY = b'synjones2024zhc1' # 16字节,即128位密钥 确保是16个字符, 避免引起不必要的异常
HMAC_KEY = b'synjones2024zhc2' # 16字节,即128位HMAC密钥'''
AESCBC、BLOCK_SIZE=16、PKCS7填充使用Crypto.Util.Padding中的pad和unpad函数进行PKCS7填充和去填充。这里使用块大小BLOCK_SIZE(16字节, 即128位)进行填充。
'''
# 加密函数
def encrypt_data(data: str) -> Tuple[str, str]:cipher = AES.new(SECRET_KEY, AES.MODE_CBC) # AES.new()会自动生成一个随机IV并将其存储在cipher.iv中ct_bytes = cipher.encrypt(pad(data.encode('utf-8'), AES.block_size)) # BLOCK_SIZE = 16 # 128 bits、默认使用PKCS7填充iv = base64.b64encode(cipher.iv).decode('utf-8')ct = base64.b64encode(ct_bytes).decode('utf-8')# 加密后的密文和IV会被编码并传输return iv, ct# 解密函数
def decrypt_data(iv: str, ct: str) -> str:try:iv = base64.b64decode(iv)ct = base64.b64decode(ct)cipher = AES.new(SECRET_KEY, AES.MODE_CBC, iv) # 使用CBC模式pt = unpad(cipher.decrypt(ct), AES.block_size) # 使用PKCS7填充return pt.decode('utf-8')except (ValueError, KeyError):return None# HMAC生成函数
def generate_hmac(data: str) -> str:return hmac.new(HMAC_KEY, data.encode('utf-8'), hashlib.sha256).hexdigest()@app.route('/send', methods=['POST'])
def send_data():content = request.jsondata_str = json.dumps(content)print('-----------------send=', data_str)# 加密数据iv, encrypted_data = encrypt_data(data_str)# 生成HMAChmac_value = generate_hmac(encrypted_data)response = {'iv': iv,'data': encrypted_data,'hmac': hmac_value}return jsonify(response)@app.route('/receive', methods=['POST'])
def receive_data():content = request.jsoniv = content.get('iv')encrypted_data = content.get('data')received_hmac = content.get('hmac')# 验证HMACexpected_hmac = generate_hmac(encrypted_data)if not hmac.compare_digest(expected_hmac, received_hmac):return jsonify({'error': 'HMAC verification failed'}), 400# 解密数据decrypted_data_str = decrypt_data(iv, encrypted_data)if decrypted_data_str is None:return jsonify({'error': 'Decryption failed'}), 400# 将解密后的字符串反序列化为JSON对象decrypted_data = json.loads(decrypted_data_str)return jsonify({'data': decrypted_data})if __name__ == '__main__':app.run(debug=True)
我们来使用postman测试:
加密过程:
解密过程
如果您觉得我分享的这些对您有用,请点击原文,关注我吧
原文链接:http服务网络请求如何确保数据安全(含python示例源码),关注获取更多内容!
相关文章:
http服务网络请求如何确保数据安全(含python示例源码)
深度学习类文章回顾 【YOLO深度学习系列】图像分类、物体检测、实例分割、物体追踪、姿态估计、定向边框检测演示系统【含源码】 【深度学习】物体检测/实例分割/物体追踪/姿态估计/定向边框/图像分类检测演示系统【含源码】 【深度学习】YOLOV8数据标注及模型训练方法整体流程…...
网络构建关键技术_2.IPv4与IPv6融合组网技术
互联网数字分配机构(IANA)在2016年已向国际互联网工程任务组(IETF)提出建议,要求新制定的国际互联网标准只支持IPv6,不再兼容IPv4。目前,IPv6已经成为唯一公认的下一代互联网商用解决方案&#…...
数仓建模—数据生命周期管理
数仓建模—数据生命周期管理 数据生命周期管理 (DLM) 是一种在从数据输入到数据销毁的整个生命周期内管理数据的方法。 数据根据不同的条件分处不同的阶段,随着其完成不同的任务或满足特定要求而逐次经历这些阶段。 一个出色的 DLM 流程提供针对企业数据的结构和组织,帮助实…...
【INTEL(ALTERA)】Nios II软件开发人员手册中设计位置的错误示例
目录 说明 解决方法 说明 Nios II软件开发人员手册正确无误 请参阅 Nios 中包含的Nios II硬件设计示例 II 嵌入式设计套件 (EDS)。提供设计示例 设计上 Altera网站的示例页面。 Nios II软件开发人员手册正确无误 请参阅 创建本应用程序和创建本 bsp …...
jeecg导入excel 含图片(嵌入式,浮动式)
jeecgboot的excel导入 含图片(嵌入式,浮动式) 一、啰嗦二、准备三、 代码1、代码(修改覆写的ExcelImportServer)2、代码(修改覆写的PoiPublicUtil)3、代码(新增类SAXParserHandler&a…...
GPT-5 一年半后发布?对此你有何期待?
GPT-5 一年半后发布?对此你有何期待? IT之家6月22日消息,在美国达特茅斯工程学院周四公布的采访中,OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布,给出了肯定答案并表示将在一年半后发布。此外,…...
SHELL脚本学习(十二)sed进阶
一、多行命令 概述 sed 编辑器的基础命令都是对一行文本进行操作。如果要处理的数据分布在多行中,sed基础命令是没办法处理的。 幸运的是,sed编辑器的设计人员已经考虑了这个问题的解决方案。sed编辑器提供了3个处理多行文本的特殊命令。 命令描述N加…...
【python】一篇文零基础到入门:快来玩吧~
本笔记材料源于: PyCharm | 创建你的第一个项目_哔哩哔哩_bilibili Python 语法及入门 (超全超详细) 专为Python零基础 一篇博客让你完全掌握Python语法-CSDN博客 0为什么安装python和pycharm? 不同于c,c࿰…...
Python武器库开发-武器库篇之Thinkphp5 SQL注入漏洞(六十六)
Python武器库开发-武器库篇之Thinkphp5 SQL注入漏洞(六十六) 漏洞环境搭建 这里我们使用Kali虚拟机安装docker并搭建vulhub靶场来进行ThinkPHP漏洞环境的安装,我们进入 ThinkPHP漏洞环境,可以 cd ThinkPHP,然后通过 …...
2024.6.28刷题记录
目录 一、13. 罗马数字转整数 贪心 二、16. 最接近的三数之和 排序指针 三、17. 电话号码的字母组合 dfs(深度优先搜索) 四、19. 删除链表的倒数第 N 个结点 1.模拟 2.前后同步指针 五、20. 有效的括号 栈 六、21. 合并两个有序链表 1.递归 …...
柔性数组(flexible array)
柔性数组从C99开始支持使用 1.柔性数组的概念 概念: 结构体中,结构体最后一个元素允许是未知大小的数组,这就叫[柔性数组]的成员 struct S {int n;char arr[]; //数组大小未知(柔性数组成员) }; 柔性数组的特点: 结构体中柔性…...
服务器配置路由
translator 在Linux系统中,通过ip route add命令添加的路由规则通常不会永久保存,它们只会在当前会话中生效。当系统重新启动后,这些临时添加的路由规则会丢失。 要求在开关机之后仍然保留这条路由,需要将路由规则永久保存。在大多…...
老生常谈问题之什么是缓存穿透、缓存击穿、缓存雪崩?举个例子你就彻底懂了!!
老生常谈问题之什么是缓存穿透、缓存击穿、缓存雪崩?举个例子你就彻底懂了!! 缓存穿透发生场景解决方案 缓存击穿解决方案 缓存雪崩发生场景解决方案 总结三者区分三者原因三者解决方案 想象一下,你开了一家便利店,店里…...
[code snippet] 生成随机大文件
[code snippet] 生成随机大文件 一个无聊的测试代码,因为要测试大文件的网络传输,就写了一个随机大文件生成脚本,做个备份。 基本上都是 GPT 生成的,哈哈。 C# 代码 namespace ConsolePlayground;internal class BigFileGenera…...
计算机网路面试HTTP篇三
HTTPS RSA 握手解析 我前面讲,简单给大家介绍了的 HTTPS 握手过程,但是还不够细! 只讲了比较基础的部分,所以这次我们再来深入一下 HTTPS,用实战抓包的方式,带大家再来窥探一次 HTTPS。 对于还不知道对称…...
如何不改变 PostgreSQL 列类型#PG培训
开发应用程序并在其背后操作数据库集群时,会遇到一个意想不到的问题是实践与理论、开发环境与生产之间的差异。这种不匹配的一个完美例子就是更改列类型。 #PG考试#postgresql培训#postgresql考试#postgresql认证 关于如何在 PostgreSQL(以及其他符合 SQ…...
RocketMQ快速入门:事务消息原理及实现(十)
目录 0. 引言1. 原理2. 事务消息的实现2.1 java client实现(适用于spring框架)2.2 springboot实现 3. 总结 0. 引言 rocketmq 的一大特性就是支持事务性消息,这在诸多场景中有所应用。在之前的文章中我们已经讲解过事务消息的使用࿰…...
Kotlin设计模式:深入理解桥接模式
Kotlin设计模式:深入理解桥接模式 在软件开发中,随着系统需求的不断增长和变化,类的职责可能会变得越来越复杂,导致代码难以维护和扩展。桥接模式(Bridge Pattern)是一种结构型设计模式,它通过…...
常用MQ消息中间件Kafka、ZeroMQ和RabbitMQ对比及RabbitMQ详解
1、概述 在现代的分布式系统和实时数据处理领域,消息中间件扮演着关键的角色,用于解决应用程序之间的通信和数据传递的挑战。在众多的消息中间件解决方案中,Kafka、ZeroMQ和RabbitMQ 是备受关注和广泛应用的代表性系统。它们各自具有独特的特…...
【UE5.3】笔记6-第一个简单小游戏
打砖块小游戏: 1、制造一面砖块组成的墙 在关卡中放置一个cube,放这地面上,将其转换成蓝图类,改名BP_Cube,更换砖块的贴图,按住alt键进行拷贝,堆出一面墙,复制出来的会很多,全选移动…...
LeetCode---402周赛
题目列表 3184. 构成整天的下标对数目 I 3185. 构成整天的下标对数目 II 3186. 施咒的最大总伤害 3187. 数组中的峰值 一、构成整天的下标对数目 I & II 可以直接二重for循环暴力遍历出所有的下标对,然后统计符合条件的下标对数目返回。代码如下 class So…...
循环冗余校验
循环冗余校验(Cyclic Redundancy Check,简称CRC)是一种广泛使用的错误检测编码技术,用于检测数据在传输或存储过程中是否发生错误。CRC通过在数据后面添加一个校验值(通常称为CRC码或CRC校验和)来实现错误检…...
resample sensor
resample sensor 的一个问题。 背景: 项目要求,发送多个数据到 sensor-hal 上去,发现无论怎样,在 sensor-hal 上都 只有一个数据。 resample sensor 是重新采样,这个怎么理解的,我的理解是: 假设 sensor 采…...
【Linux】多线程的相关知识点
一、线程安全 1.1 可重入 VS 线程安全 1.1.1 概念 线程安全:多个线程并发执行同一段代码时,不会出现不同的结果。常见对全局变量或者静态变量进行操作,并且没有锁的保护的情况下,会出现问题。重入:同一个函数被不同…...
Java反射详解
Java反射 一.什么是反射 我们使用的一些像框架,tomcat,或者一些其他的组件(jackson 对象–>json)。他们可以做到给他什么类名,就可以创建给定类的对象,并调用该对象的方法和属性。这是如何做到的? 当他们加载我们…...
Spring Boot与Apache Kafka集成的深度指南
Spring Boot与Apache Kafka集成的深度指南 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在现代分布式系统中,消息队列的作用愈发重要࿰…...
甄选版“论软件系统架构评估”,软考高级论文,系统架构设计师论文
论文真题 对于软件系统,尤其是大规模的复杂软件系统来说,软件的系统架构对于确保最终系统的质量具有十分重要的意义,不恰当的系统架构将给项目开发带来高昂的代价和难以避免的灾难。对一个系统架构进行评估,是为了:分析现有架构存在的潜在风险,检验设计中提出的质量需求,…...
uniapp开发企业微信内部应用
最近一直忙着开发项目,终于1.0版本开发完成,抽时间自己总结下在项目开发中遇到的技术点。此次项目属于自研产品,公司扩展业务,需要在企业微信中开发内部应用。因为工作中使用的是钉钉,很少使用企业微信,对于…...
0122__linux之eventfd理解
linux之eventfd理解-CSDN博客 Linux fd 系列 — eventfd 是什么?-CSDN博客...
数学建模 —— 查找数据
目录 百度搜索技巧 完全匹配搜索:查询词的外边加上双引号“ ” 标题必含关键词:查询词前加上intitle: 搜索文档:空格再输入filetype:文件格式 去掉不想要的:查询词后面加空格后加减号与关键字 知网查文献 先看知网的硕博士…...
简易广州网站建设/外贸建站seo
第四章 进程 1、windows支持两种应用程序:GUI程序和CUI程序,即图形用户界面程序和控制台应用程序。 在Visual Studio中,可以使用项目属性的连接器开关设置选择哪种程序,/SUBSYSTEM:CONSOLE和/SUBSYSTEM:WINDOWS 当运行应用程序时操…...
免费自制app软件靠谱么/网站搜索优化方法
Nginx默认没有开启利用多核CPU,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU。CPU是任务处理,计算最关键的资源,CPU核越多,性能就越好。配置Nginx多核CPU,worker_cpu_affinity使用方法和范例1. 2核CPU,开启2个进…...
政府网站建设的问题/全网最好的推广平台
卷积计算和池化计算公式 卷积 卷积计算中,()表示向下取整。 输入:n* c0* w0* h0 输出:n* c1* w1* h1 其中,c1就是参数中的num_output,生成的特征图个数。 w1(w02pad-kernel_s…...
太原做网站的鸣蝉公司/网页百度网盘
来源:http://www.open-open.com/news/view/102a2de 特性一:正则表达式 相信大家都会非常喜欢这个特性,无须服务器端的检测,使用浏览器的本地功能就可以帮助你判断电子邮件的格式,URL,或者是电话格式&#x…...
wordpress图库主题/seo优化的优点
Intent(意图) 将一个复杂对象的构建(construction)与其表示(representation)分离,这样同样的构建过程可以创建出不同的表示。 Motivation(动机) 一个RTF(R…...
网站如何有排名/一个新手怎么做推广
虚拟存储实现的思想是什么?(以分页为例) 虚拟存储是利用大容量的外存来扩充了内存,也就是说产生了一个比实际物理内存大得多的一个虚拟地址空间,也就由此产生了逻辑地址和物理地址,当处理器执行某一条指令…...