http服务网络请求如何确保数据安全(含python示例源码)

在这里插入图片描述
深度学习类文章回顾
【YOLO深度学习系列】图像分类、物体检测、实例分割、物体追踪、姿态估计、定向边框检测演示系统【含源码】
【深度学习】物体检测/实例分割/物体追踪/姿态估计/定向边框/图像分类检测演示系统【含源码】
【深度学习】YOLOV8数据标注及模型训练方法整体流程介绍及演示
【深度学习】行人跌倒行为检测软件系统
【深度学习】火灾检测软件系统
【深度学习】吸烟行为检测软件系统
【深度学习】数竹签演示软件系统
【深度学习】菜品目标检测软件系统

本文链接:http服务网络请求如何确保数据安全(含python示例源码)

1. 本文摘要

  • 当今数据安全越来越重要,http网络请求数据安全加强要求是为了保护公民的隐私和数据安全,防范日益复杂的网络攻击,确保电子商务和在线服务的可靠性,并遵守相关法律法规。
  • 当前我参与的各类项目,均有安全检测,例如经常检测出的一些问题
    • http协议数据传输,需采用校验码技术或密码技术保证重要数据在传输过程中的完整性
    • 鉴别信息及重要业务数据采用经国家密码主管部门认可的密码技术,保证其在传输过程中数据的保密性。
  • 本文主要介绍在http的传输过程中如何保证数据安全,即:如何确保http请求中数据传输的完整性和传输过程中数据的保密性。
  • 本文主要使用python flask来演示整个过程。
    本系统所涉及的源码已打包上传。
    文中源码文件【获取方式】:关注公众号:利哥AI实例探险
    给公众号发送 “http传输安全保密” 获取下载方式
    注意发送的关键词不能错,否则匹配不到对应资源,由于本人能力有限,难免有疏漏之处。

2. 实际项目中经常遇到的问题

一般情况下,在我们交付完甲方软件系统后,甲方都会请专业的团队进行漏洞检测,出具《xxx系统漏洞检测报告》,这其中我们经常会遇到的问题如下:

  1. http协议数据传输,需采用校验码技术或密码技术保证重要数据在传输过程中的完整性。
  2. 鉴别信息及重要业务数据采用经国家密码主管部门认可的密码技术,保证其在传输过程中数据的保密性。
    本文只针对这两类问题,给出一些优化建议。

3. 解决方案

数据的保密性:使用国家密码管理局认可的对称加密算法(如AES)来确保数据的保密性
数据的完整性:可以使用HMAC(哈希消息认证码)来确保数据在传输过程中的完整性

3.1 AES是如何保证数据的保密性的

AES(高级加密标准)对称加密通过以下方式保证数据的保密性:

  1. 密钥唯一性: AES使用一个唯一的对称密钥,这个密钥必须在发送方和接收方之间保持秘密。如果密钥泄露,任何人都可以解密数据。
  2. 复杂加密算法: AES算法通过多轮替换和置换操作,将明文数据转换成密文,使得密文难以被破解。
  3. 初始向量(IV): 在CBC模式中,AES使用一个随机生成的初始向量(IV)进行加密,使相同的明文每次加密得到不同的密文,从而增强了安全性。
  4. 密钥长度: AES支持128位、192位和256位密钥长度,密钥越长,破解难度越大。
    通过以上机制,AES确保了数据在传输过程中的保密性,即使数据被截获,未经授权的一方也无法解密和理解数据。

3.2 随机生成的IV(初始化向量)是如何确保加密的安全性的

  1. 防止相同明文产生相同密文: 如果使用相同的密钥加密相同的明文,但没有随机IV,那么每次加密的结果将是相同的。这使得攻击者更容易识别和分析重复的模式,从而破坏加密的安全性。随机IV确保即使明文相同,生成的密文也不同。
  2. 增强密码学强度: IV的随机性增加了加密算法的复杂性,使得攻击者更难以破解。每次加密时生成新的随机IV,确保没有重复,增加了攻击者的工作量。
  3. 确保初始加密块的随机性: 在使用块加密模式(如CBC模式)时,IV用于加密第一个块。随机IV确保初始块的加密是不可预测的,进一步增强了加密的安全性。
  4. 防止重放攻击: 在某些情况下,攻击者可能会截获加密的消息并重放它们。使用随机IV确保每个加密会话都是唯一的,从而防止重放攻击。

3.3 哈希消息认证码是如何确保数据传输完整性的

  1. 哈希函数: HMAC使用一个密码学哈希函数(如SHA-256),将数据和密钥混合生成一个唯一的哈希值。
  2. 密钥保护: HMAC结合了一个秘密密钥,仅持有该密钥的接收方才能验证数据的完整性,防止中间人篡改数据。
  3. 签名生成和验证: 发送方在数据传输前计算HMAC并附加到数据上,接收方接收到数据后重新计算HMAC并与传来的HMAC值对比,如果一致,则数据完整无误。

除了使用随机IV确保加密的安全性,还结合了HMAC来确保数据的完整性。每次加密的结果都包含IV和HMAC,接收方使用这些信息验证数据的完整性和解密数据,确保传输过程中的数据既安全又完整。
通过随机IV和HMAC的结合,我们可以实现一个安全的加密传输系统,防止数据被攻击者篡改或重放,确保数据在传输过程中的安全性和完整性。

4. 代码实现示例

  1. 使用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
  1. 使用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://www.mzph.cn/web/36105.shtml

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

相关文章

FreeRTOS信号量和互斥量

信息量 简介 信号量是一种解决同步问题的机制,可以实现对共享资源的有序访问。 前面介绍的队列(queue)可以用于传输数据:在任务之间、任务和中断之间。 消息队列用于传输多个数据,但是有时候我们只需要传递状态,这个状态值需要用…

计算机网络:408考研|湖科大教书匠|原理参考模型I|学习笔记

系列目录 计算机网络总纲领 计算机网络特殊考点 计算机网络原理参考模型I 计算机网络原理参考模型II 目录 系列目录更新日志数据链路层(Data Link Layer)一、基本概念二、三个重要问题三、 🌟点对点协议(PPP, Point-to-Point Protocol)四、 以太网五、802.11 无线局…

数据结构-分析期末选择题考点(串、数组)

竹月光中诗世界 松风影里酒生涯 目录 串的常见考法(一)BF算法 串的常见考法(二)KMP求 next数组 串的常见考法(三)串的概念及性质 串的常见考法(四)给出主串求子串数量 数组的常见…

使用 nvm 管理 Node 版本及 pnpm 安装

文章目录 GithubWindows 环境Mac/Linux 使用脚本进行安装或更新Mac/Linux 环境变量nvm 常用命令npm 常用命令npm 安装 pnpmNode 历史版本 Github https://github.com/nvm-sh/nvm Windows 环境 https://nvm.uihtm.com/nvm.html Mac/Linux 使用脚本进行安装或更新 curl -o- …

如何在AWS上使用免费的服务器

要在AWS上免费使用的服务器,你可以按照以下步骤操作: (1)注册AWS账户: 访问AWS官方网站(https://aws.amazon.com/cn/),点击右上角的“完成注册”,按照页面提示填写相关…

华为BGP路由实验基础1------用物理口建立对等体

1.用物理口做BGP建立对等体建立BGP连接 实验拓扑: 实验步骤: 1.完成基本配置 sys [Huawei]sys AR1 [AR1]undo in e [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [AR1-GigabitEthernet0/0/0]q [AR1] sys [Huawei]sys AR2 [AR2]undo i…

【Python】已解决:Python正确安装文字识别库EasyOCR

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:Python正确安装文字识别库EasyOCR 一、分析问题背景 在使用Python进行图像处理和文字识别时,EasyOCR是一个流行的库,它基于PyTorch&…

【算法刷题 | 动态规划14】6.28(最大子数组和、判断子序列、不同的子序列)

文章目录 35.最大子数组和35.1题目35.2解法:动规35.2.1动规思路35.2.2代码实现 36.判断子序列36.1题目36.2解法:动规36.2.1动规思路36.2.2代码实现 37.不同的子序列37.1题目37.2解法:动规37.2.1动规思路37.2.2代码实现 35.最大子数组和 35.1…

笔记本电脑为什么可以链接热点,却无法连接WiFi

① 在开始菜单的搜索栏中,输入 cmd 。 ② 右击上方该程序,选择 以管理员身份运行 ③ 输入:nestsh winsock reset ④ 敲击回车,显示如下页面 ⑤ 再输入 ipconfig/flushdns 回车 ⑥ 然后重启电脑,OVER!

98、验证二叉搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 题解:若要验证是…

Python之父推荐!Star 60k!深入CPython内核:揭秘内部实现细节

都说 Python 是人工智能的“天选”语言,为什么呢? 可能很多读者都知道,Python 的解释器是用 C 语言写的,所以其实我们在谈论 “Python” 的时候,99.9% 的情况说的就是 “CPython”! CPython 是目前最流行的…

SD-WAN组网对比传统组网的优势

随着商业环境的迅速变化,企业对网络连接的需求不断增长。传统组网方案已经难以满足现代企业的需求,而作为一种新兴的网络解决方案,SD-WAN正逐渐受到企业的青睐。那么,SD-WAN究竟在哪些方面优于传统组网方案呢? 灵活性 …

深度探讨网络安全:挑战、防御策略与实战案例

目录 ​编辑 一、引言 二、网络安全的主要挑战 恶意软件与病毒 数据泄露 分布式拒绝服务攻击(DDoS) 内部威胁 三、防御策略与实战案例 恶意软件防护 网络钓鱼防护 数据泄露防护 总结 一、引言 随着信息技术的迅猛发展,网络安全问…

# [0628] Task04 DQN 算法及进阶

easy-rl PDF版本 笔记整理 P6 - P8 joyrl 比对 补充 P7 - P8 相关 代码 整理 待整理 !! 最新版PDF下载 地址:https://github.com/datawhalechina/easy-rl/releases 国内地址(推荐国内读者使用): 链接: https://pan.baidu.com/s/1i…

第二节:如何使用thymeleaf渲染html(自学Spring boot 3.x的第一天)

大家好&#xff0c;我是网创有方&#xff0c;今天来学习如何使用thymeleaf渲染html。该模板运用不广泛&#xff0c;所以本节内容了解既可。 第一步&#xff1a;创建html文件。 在模板templates目录下创建一个html文件。 编写代码如下&#xff1a; <!DOCTYPE html> <…

RocketMQ快速入门:事务消息原理及实现(十)

目录 0. 引言1. 原理2. 事务消息的实现2.1 java client实现&#xff08;适用于spring框架&#xff09;2.2 springboot实现 3. 总结 0. 引言 rocketmq 的一大特性就是支持事务性消息&#xff0c;这在诸多场景中有所应用。在之前的文章中我们已经讲解过事务消息的使用&#xff0…

P1114 “非常男女”计划最优解

原题地址 P1114 “非常男女”计划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 代码题解 AC代码&#xff08;1&#xff09; 因为用的是级的算法&#xff0c;所以最后一个 了&#xff0c;这里使用特判来得到的&#xff0c;给你们放一下代码&#xff1a; #include <bi…

《昇思25天学习打卡营第5天|onereal》

ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一样主要应用在移动端&#xff0c;所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作&#xff1a;Pointw…

49-5 内网渗透 - 服务注册表权限脆弱提权

一、服务注册表权限脆弱提权介绍 Windows操作系统中的注册表存储了每个系统服务的相关条目。注册表使用访问控制列表(ACL)来管理用户对其条目的访问权限。如果注册表的ACL配置不正确,可能导致低权限用户获得对服务注册表的写入权限。攻击者可以利用这一漏洞修改注册表内容,…

【android 9】【input】【9.发送按键事件3——Inputchannel的创建过程】

系列文章 本人系列文章-CSDN博客 目录 系列文章 目录 1.简介 1.1 主要步骤 1.2 时序图 2.源码分析 2.1 WindowManagerImpl的addView 2.2 WindowManagerGlobal的addView 2.3 ViewRootImpl 2.4 getWindowSession 2.5 WMS中的openSession 2.6 Session 2.7 class W 2.…